3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
3DES(即Triple DES)是 DES 向 AES 过渡的加密算法,它使用3条56位的密钥对数据进行三次加密,是 DES 的一个更安全的变形。它以 DES 为基本模块,通过组合分组方法设计出分组加密算法。比起最初的 DES,AES 更为安全。
5.3 初始向量IV
初始向量 IV 的作用是使加密更加安全可靠,我们使用 AES 加密时需要主动提供初始向量,而且只需要提供一个初始向量就够了,后面每段数据的加密向量都是前面一段的密文。初始向量 IV 的长度规定为128位16个字节,初始向量的来源为随机生成。至于为什么初始向量能使加密更安全可靠,会在下面的加密模式中提到。
private static byte[] RC4Base(byte[] input, String mKkey) {
int x = 0;
int y = 0;
// 这边将密钥确保为 256 个字节
byte key[] = initKey(mKkey);
int xorIndex;
byte[] result = new byte[input.length];
for (int i = 0; i < input.length; i++) {
x = (x + 1) & 0xff;
y = ((key[x] & 0xff) + y) & 0xff;
byte tmp = key[x];
key[x] = key[y];
key[y] = tmp;
xorIndex = ((key[x] & 0xff) + (key[y] & 0xff)) & 0xff;
result = (byte) (input ^ key[xorIndex]);
}
return result;
}
}
调用:
public static void main(String[] args) {
String data = "hello Test symmetric encry";
String secretKey = "0123456789abcdef";
byte[] encryData = RC4.encry_RC4_byte(data, secretKey);
System.out.println("encryData = " + new String(encryData));
String decryData = RC4.decry_RC4(encryData, secretKey);
System.out.println("decryData = " + decryData);
}
执行输出: