简介
也就是 3 重 DES — — Triple DES。它相当于是对每个数据块应用三次 DES 加密算法。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
原理
使用 3 条 56 位的密钥对数据进行三次加密。3DES(即 Triple DES)是 DES 向 AES 过渡的加密算法(1999年,NIST 将 3-DES 指定为过渡的加密标准)。
输出
入口参数有三个:key、data、mode。
- key 为加密解密使用的密钥,长度为24字节
- data 为加密 解密的数据,
- mode 为其工作模式。
密钥是192位,但是是分开使用的,每个加密快的长度应该还是8字节的整数倍
记住:如果是有padding,如果是明文如果是8字节的整数倍的话,加密的密文长度肯定要增加8个字节,因为要有标识
java demo
public static byte[] Des333() {
String data = "1234123";
String key = "123456781234567812345678";//密钥长度必须大于8个字节
String iv = "12341234";
try {
// 从原始密钥数据创建DESKeySpec对象
DESedeKeySpec dks = new DESedeKeySpec(key.getBytes());
// 创建一个密匙工厂,然后用它把DESKeySpec转换成
// 一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey secretKey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
//使用nopadding模式,data必须为8字节的整数倍
// Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
// 用密匙初始化Cipher对象
IvParameterSpec param = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, secretKey, param);
// 执行加密操作
byte encryptedData[] = cipher.doFinal(data.getBytes());
System.out.println(str16(encryptedData).length());
return encryptedData;
} catch (Exception e) {
System.err.println("出错!");
e.printStackTrace();
}
return null;
}
网友评论