3DES
2024年11月12日约 494 字大约 2 分钟
4.2 3DES
3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。
它相当于是对每个数据块应用三次 DES 加密算法, 使用3条56位的密钥对数据进行三次加密。
由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;
3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,
而不是设计一种全新的块密码算法。
3DES(即Triple DES)是 DES 向 AES 过渡的加密算法,它使用3条56位的密钥对数据进行三次加密,
是 DES 的一个更安全的变形。
密钥24个字节(3DES的密钥长度为168位)。
它以 DES 为基本模块,通过组合分组方法设计出分组加密算法。比起最初的 DES,AES 更为安全。
加密与解密代码样例
Java
加密
private static String desedeEncrypt(byte[] skey, String input) throws Exception {
// 实例化DES密钥材料, 使用 b 中的前8个字节作为DES密钥的内容
DESedeKeySpec dks = new DESedeKeySpec(skey);
// 实例化秘钥工厂
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DESede");
// 生成秘钥
SecretKey secretKey = secretKeyFactory.generateSecret(dks);
// 实例化
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
// 初始化。设置为加密模式
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 执行
byte[] data = cipher.doFinal(input.getBytes());
String basee64Data = Base64.encodeBase64String(data);
System.out.println(basee64Data);
return basee64Data;
}
解密
private static String desedeDecrypt(byte[] skey, String encBase64Data) throws Exception {
byte[] encData = Base64.decodeBase64(encBase64Data);
// 实例化DES密钥材料, 使用 b 中的前8个字节作为DES密钥的内容
DESedeKeySpec dks = new DESedeKeySpec(skey);
// 实例化秘钥工厂
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DESede");
// 生成秘钥
SecretKey secretKey = secretKeyFactory.generateSecret(dks);
// 实例化
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
// 初始化。设置为加密模式
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// 执行
byte[] s = cipher.doFinal(encData);
String rs = new String(s);
System.out.println(rs);
return rs;
}