3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的**长度变得容易被暴力**;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的**长度来避免类似的攻击,而不是设计一种全新的块密码算法
3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的**,M代表明文,C代表密文,这样:
3DES加密过程为:C=Ek3(Dk2(Ek1(M)))
3DES解密过程为:M=Dk1(EK2(Dk3©))
贴代码!!!!!!!!!!!!!!!!!!!!!
加密算法:
/**
* 使用3DES算法对目标数据执行加密操作
* @author knight
* @param key 192位的加密key
* @param src 需要加密的数据
* @return byte[] 执行加密后的数据
*/
public static byte[] encrypt(byte[] key,byte []src) {
byte[] value=null;
try {
/*生成秘钥key*/
SecretKeySpec deskey = new SecretKeySpec(key,ALGORITHM);
/*对目标数据执行加密操作*/
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, deskey);
value=cipher.doFinal(src);
}catch (Exception e) {
e.printStackTrace();
}
return value;
}
解密算法:
/**
* 使用3DES算法对目标数据执行解密操作
* @author knight
* @param key 192位的加密key
* @param src 需要执行解密的数据
* @return byte[] 执行解密后的数据
*/
public static byte[] decrypt(byte []key,byte[] src) {
byte []value=null;
try {
/*生成秘钥key*/
SecretKeySpec deskey = new SecretKeySpec(key, ALGORITHM);
/*对目标数据执行解密操作*/
Cipher cipher=Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, deskey);
value=cipher.doFinal(src);
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
结果
是不是很简单啊?
源码
package com.wrf.encrypt;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.junit.jupiter.api.Test;
public class Use3DES {
/*定义需要使用的加解密算法*/
//定义加密算法 可用
private static final String ALGORITHM="DESede";
/**
* 使用3DES算法对目标数据执行加密操作
* @author knight
* @param key 192位的加密key
* @param src 需要加密的数据
* @return byte[] 执行加密后的数据
*/
public static byte[] encrypt(byte[] key,byte []src) {
byte[] value=null;
try {
/*生成秘钥key*/
SecretKeySpec deskey = new SecretKeySpec(key,ALGORITHM);
/*对目标数据执行加密操作*/
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, deskey);
value=cipher.doFinal(src);
}catch (Exception e) {
e.printStackTrace();
}
return value;
}
/**
* 使用3DES算法对目标数据执行解密操作
* @author knight
* @param key 192位的加密key
* @param src 需要执行解密的数据
* @return byte[] 执行解密后的数据
*/
public static byte[] decrypt(byte []key,byte[] src) {
byte []value=null;
try {
/*生成秘钥key*/
SecretKeySpec deskey = new SecretKeySpec(key, ALGORITHM);
/*对目标数据执行解密操作*/
Cipher cipher=Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, deskey);
value=cipher.doFinal(src);
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
@Test
public void run() {
try {
byte[] key="01234567899876543210abcd".getBytes();
byte[] encoded=encrypt(key, "测试数据...".getBytes("UTF-8"));
System.out.println("加密后的数据->"+new String(encoded));
System.out.println("解密后的数据->"+new String(decrypt(key, encoded),"UTF-8"));
}catch (Exception e) {
e.printStackTrace();
}
}
}
祝各位看官学习快乐!!!!!!!!!!!!!