3DES加密
/**
* 3DES加密
*
* @param data 普通文本
* @param desKey 密码
* @return
* @throws Exception
*/
public static String des3EncodeECB(String desKey, String data) {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
try {
byte[] dataByte = data.getBytes(StandardCharsets.UTF_8);
byte[] key = build3DesKey(desKey);
//生成密钥
SecretKey deSede = new SecretKeySpec(key, "DESede");
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, deSede);
return new BASE64Encoder().encode(cipher.doFinal(dataByte));
} catch (Exception e) {
e.printStackTrace();
return StringUtils.EMPTY;
}
}
3DES解密
/**
* 3DES解密
*
* @param data 加密文本
* @param desKey 密码
* @return
*/
public static String des3DecodeECB(String desKey, String data) {
try {
//--通过base64,将字符串转成byte数组
BASE64Decoder decoder = new BASE64Decoder();
byte[] dataByte = decoder.decodeBuffer(data);
byte[] key = build3DesKey(desKey);
//生成密钥
SecretKey deSede = new SecretKeySpec(key, "DESede");
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS7Padding");
cipher.init(Cipher.DECRYPT_MODE, deSede);
byte[] bout = cipher.doFinal(dataByte);
return new String(bout, StandardCharsets.UTF_8);
} catch (Exception e) {
e.printStackTrace();
return StringUtils.EMPTY;
}
}
/**
* 根据字符串生成密钥字节数组
*
* @param keyStr 密钥字符串
*/
private static byte[] build3DesKey(String keyStr) {
try {
//声明一个24位的字节数组,默认里面都是0
byte[] key = new byte[24];
//将字符串转成字节数组
byte[] temp = keyStr.getBytes(StandardCharsets.UTF_8);
if (key.length > temp.length) {
//如果temp不够24位,则拷贝temp数组整个长度的内容到key数组中
System.arraycopy(temp, 0, key, 0, temp.length);
} else {
//如果temp大于24位,则拷贝temp数组24个长度的内容到key数组中
System.arraycopy(temp, 0, key, 0, key.length);
}
return key;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}