package com.ruoyi.system.utils.ticketUtil;
|
import java.io.IOException;
|
import java.security.SecureRandom;
|
import java.util.Base64;
|
import javax.crypto.Cipher;
|
import javax.crypto.SecretKey;
|
import javax.crypto.SecretKeyFactory;
|
import javax.crypto.spec.DESKeySpec;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import sun.misc.BASE64Decoder;
|
import sun.misc.BASE64Encoder;
|
public class DesUtil {
|
private static final String DES = "DES";
|
|
/**
|
* Description 根据键值进行加密
|
* @param data
|
* @param key 加密键byte数组
|
* @return
|
* @throws Exception
|
*/
|
public static String encrypt(String data, String key) throws Exception {
|
byte[] bt = encrypt(data.getBytes("UTF-8"), key.getBytes("UTF-8"));
|
String strs = new BASE64Encoder().encode(bt);
|
return strs;
|
}
|
/**
|
* Description 根据键值进行解密
|
* @param data
|
* @param key 加密键byte数组
|
* @return
|
* @throws IOException
|
* @throws Exception
|
*/
|
public static String decrypt(String data, String key) throws Exception,
|
Exception {
|
if (data == null)
|
return null;
|
BASE64Decoder decoder = new BASE64Decoder();
|
byte[] buf = decoder.decodeBuffer(data);
|
byte[] bt = decrypt(buf,key.getBytes("UTF-8"));
|
return new String(bt, "UTF-8");
|
}
|
/**
|
* Description 根据键值进行加密
|
* @param data
|
* @param key 加密键byte数组
|
* @return
|
* @throws Exception
|
*/
|
private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
|
// 生成一个可信任的随机数源
|
SecureRandom sr = new SecureRandom();
|
// 从原始密钥数据创建DESKeySpec对象
|
DESKeySpec dks = new DESKeySpec(key);
|
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
|
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
|
SecretKey securekey = keyFactory.generateSecret(dks);
|
// Cipher对象实际完成加密操作
|
Cipher cipher = Cipher.getInstance(DES);
|
// 用密钥初始化Cipher对象
|
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
|
return cipher.doFinal(data);
|
}
|
/**
|
* Description 根据键值进行解密
|
* @param data
|
* @param key 加密键byte数组
|
* @return
|
* @throws Exception
|
*/
|
private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
|
// 生成一个可信任的随机数源
|
SecureRandom sr = new SecureRandom();
|
// 从原始密钥数据创建DESKeySpec对象
|
DESKeySpec dks = new DESKeySpec(key);
|
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
|
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
|
SecretKey securekey = keyFactory.generateSecret(dks);
|
// Cipher对象实际完成解密操作
|
Cipher cipher = Cipher.getInstance(DES);
|
// 用密钥初始化Cipher对象
|
cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
|
return cipher.doFinal(data);
|
}
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
}
|
|
/**
|
* 辅助方法:将字符串进行Base64编码
|
*/
|
public static String toBase64(String data) throws Exception {
|
return Base64.getEncoder().encodeToString(data.getBytes("UTF-8"));
|
}
|
|
/**
|
* 辅助方法:将Base64字符串解码
|
*/
|
public static String fromBase64(String base64Data) throws Exception {
|
byte[] decodedBytes = Base64.getDecoder().decode(base64Data);
|
return new String(decodedBytes, "UTF-8");
|
}
|
}
|