项目中遇到需求,接口参数要求3DES加密。查了一下资料,得到如下代码:
可以去http://tool.chacuo.net/crypt3des/ 对比验证
public class DESUtil {
// 算法名称
public static final String KEY_ALGORITHM = "desede";
// 算法名称/加密模式/填充方式
public static final String CIPHER_ALGORITHM = "DESede/ECB/PKCS7Padding";
public static final String CHARSET_UTF8 = "UTF-8";
/**
* 加密
*/
public static String encrypt3DES(String key, String msg) {
try {
// 生成密钥
byte[] bytes = key.getBytes(CHARSET_UTF8);
System.out.println("密钥字节长度:" + bytes.length);
SecretKey deskey = new SecretKeySpec(bytes, "DESede");
// 加密工具
Cipher c1 = Cipher.getInstance(CIPHER_ALGORITHM);
// 加密
c1.init(Cipher.ENCRYPT_MODE, deskey);
byte[] msgBytes = msg.getBytes(CHARSET_UTF8);
byte[] doFinal = c1.doFinal(msgBytes);
System.out.println("\n加密后的字节如下:");
for (int i = 0; i < doFinal.length; i++) {
System.out.print(doFinal[i] + "\t");
}
return HexUtil.encodeHexStr(doFinal);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 解密
*/
public static String decrypt3DES(String key, String encryptMsg) {
try {
// 生成密钥
byte[] bytes = key.getBytes(CHARSET_UTF8);
System.out.println("密钥字节长度:" + bytes.length);
SecretKey deskey = new SecretKeySpec(bytes, "DESede");
// 初始工具
Cipher instance = Cipher.getInstance(CIPHER_ALGORITHM);
// DECRYPT_MODE 解密模式
instance.init(Cipher.DECRYPT_MODE, deskey);
byte[] doFinal = instance.doFinal(HexUtil.hexStringToBytes(encryptMsg));
return new String(doFinal, CHARSET_UTF8);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}