des 加密解密工具类

  最近在做des的双对称加密解密,特此记录一下。

  des对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码,是一种对称加密算法。
  先上两个方法:加密与解密。
  
 1 public  String encryptDes(String data,String key) throws Exception {
 2 
 3         //使用原始密钥数据创建DESKeySpec对象
 4         DESedeKeySpec dks = new DESedeKeySpec(key.getBytes());
 5         //创建一个密钥工厂
 6         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
 7         //用密钥工厂把DESKeySpec转换成一个SecretKey对象
 8         Key k = keyFactory.generateSecret(dks);
 9 
10         //初始化Cipher引擎类,参数分别为:算法/工作模式/填充模式
11         Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
12         //初始化向量
13         IvParameterSpec ips = new IvParameterSpec("12345678".getBytes());
14         //初始化加密cipher
15         cipher.init(Cipher.ENCRYPT_MODE, k, ips);
16         //执行加密并输出并base64转码加密后byte数组
17         String str = Base64.encodeBase64String(cipher.doFinal(data.getBytes("UTF-8")));
18         return str;
19     }
 1 public static String decryptDes(String data, String key) throws Exception{
 2 
 3             DESedeKeySpec dks = new DESedeKeySpec(key.getBytes());
 4             SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
 5             Key k = keyFactory.generateSecret(dks);
 6             Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
 7             IvParameterSpec ips = new IvParameterSpec("12345678".getBytes());
 8             cipher.init(Cipher.DECRYPT_MODE, k, ips);
 9             byte[] out = cipher.doFinal(Base64.decodeBase64(data));;
10             return new String(out, "UTF-8");
11     }

 

  ok,放送完毕。

  一些知识:

  数据填补类型:

    NoPadding :API或算法本身不对数据进行处理。
    PKCS5Padding :

      加密前:数据字节长度对8取余,余数为m,若m>0,则补足8-m个字节,字节数值为8-m,即差几个字节就补几个字节,

        字节数值即为补充的字节数,若为0则补充8个字节的8.

      解密后:取最后一个字节,值为m,则从数据尾部删除m个字节,剩余数据即为加密前的原文。比如差三个字节的话填为

        11111333,差四个字节就填为 11114444 没有差就填 88888888

  向量:
    在CBC(不光是DES算法)模式下,iv通过随机数(或伪随机)机制产生是一种比较常见的方法。
    iv的作用主要是用于产生密文的第一个block,以使最终生成的密文产生差异(明文相同的情况下),
    使密码攻击变得更为困难,除此之外iv并无其它用途。最大的好处是,即使相同的明文,相同的密钥,也能产生不同的密文。

最后祝工作顺利,身体健康,远离疫情,共创辉煌。
 

posted on 2020-03-16 23:41  liutian1912  阅读(1054)  评论(0)    收藏  举报

导航