package com.hujiang.juice.common.utils;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.SecureRandom;
import java.util.Base64;
/**
* Created by xujia on 2016/8/24.
*/
public class DESUtil {
public static final byte[] desKey = new byte[]{21, 1, -110, 82, -32, -85, -128, -65};
/**
* 数据加密,算法(DES)
*
* @param data
* 要进行加密的数据
* @param desKey DES密钥
* @return 加密后的数据
*/
public static String encrypt(String data, byte[] desKey) {
String encryptedData = null;
try {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
DESKeySpec deskey = new DESKeySpec(desKey);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(deskey);
// 加密对象
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key, sr);
// 加密,并把字节数组编码成字符串
encryptedData = Base64.getEncoder().encodeToString(cipher.doFinal(data.getBytes()));
} catch (Exception e) {
// log.error("加密错误,错误信息:", e);
throw new RuntimeException("加密错误,错误信息:", e);
}
return encryptedData;
}
/**
* 向前兼容,key固定
* @deprecated
* @param data 要加密的数据
* @return 加密后的数据
*/
public static String encrypt(String data){
return encrypt(data, desKey);
}
/**
* 数据解密,算法(DES)
*
* @param cryptData
* 加密数据
* @param desKey DES密钥
* @return 解密后的数据
*/
public static String decrypt(String cryptData, byte[] desKey) {
String decryptedData = null;
try {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
DESKeySpec deskey = new DESKeySpec(desKey);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(deskey);
// 解密对象
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key, sr);
// 把字符串解码为字节数组,并解密
decryptedData = new String(cipher.doFinal(Base64.getDecoder().decode(cryptData)));
} catch (Exception e) {
// log.error("解密错误,错误信息:", e);
throw new RuntimeException("解密错误,错误信息:", e);
}
return decryptedData;
}
/**
* 向前兼容,key固定
* @deprecated
* @param cryptData 加密数据
* @return 解密后的数据
*/
public static String decrypt(String cryptData){
return decrypt(cryptData, desKey);
}
public static void main(String[] args){
String encryptString= encrypt("9$r05YT*6G", desKey);
System.out.println(encryptString);
String desencryptString = decrypt(encryptString, desKey);
System.out.println(desencryptString);
}
}