DES 加密、解密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/* DES 加密、解密 */
 
/**
  * DES 加密
 
  * @param data
  *            明文
  * @return
  * @throws Exception
  */
public static String DESEncrypt(String data) throws Exception {
 
     try {
         // 生成一个可信任的随机数源
         SecureRandom sr = new SecureRandom();
 
         // 从原始密钥数据创建DESKeySpec对象
         DESKeySpec dks = new DESKeySpec(KEY.getBytes());
 
         // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
         SecretKey securekey = keyFactory.generateSecret(dks);
 
         // Cipher对象实际完成加密操作
         Cipher cipher = Cipher.getInstance("DES");
 
         // 用密钥初始化Cipher对象
         cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
         // 加密数据
         String strs = new BASE64Encoder().encodeBuffer(cipher.doFinal(data.getBytes()));
         return strs;
     } catch (Exception e) {
         e.printStackTrace();
     }
     return null;
}
 
/**
  * DES 解密
 
  * @param data
  *            密文
  * @return 明文
  * @throws Exception
  */
public  static  String DESDecrypt(String data)  throws  Exception, Exception {
     if  (data ==  null )
         return  null ;
     byte [] buf =  new  BASE64Decoder().decodeBuffer(data);
 
     // 生成一个可信任的随机数源
     SecureRandom sr =  new  SecureRandom();
 
     // 从原始密钥数据创建DESKeySpec对象
     DESKeySpec dks =  new  DESKeySpec(KEY.getBytes());
 
     // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( "DES" );
     SecretKey securekey = keyFactory.generateSecret(dks);
 
     // Cipher对象实际完成加密操作
     Cipher cipher = Cipher.getInstance( "DES" );
 
     // 用密钥初始化Cipher对象
     cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
 
     return  new  String(cipher.doFinal(buf));
}



上面代码在测试的时候,解密出现了乱码,

建议采用自己对base64进行编码格式控制,这样就能够保证加密,解密格式一致,不会出现乱码






      本文转自建波李 51CTO博客,原文链接:http://blog.51cto.com/jianboli/1902082,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值