|
@ -0,0 +1,150 @@
|
|
|
package cn.stylefeng.guns.zjxlUtil;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.security.SecureRandom;
|
|
|
|
|
|
import javax.crypto.Cipher;
|
|
|
import javax.crypto.SecretKey;
|
|
|
import javax.crypto.SecretKeyFactory;
|
|
|
import javax.crypto.spec.DESKeySpec;
|
|
|
|
|
|
import sun.misc.BASE64Decoder;
|
|
|
import sun.misc.BASE64Encoder;
|
|
|
/***
|
|
|
* @ClassName: DesUtil
|
|
|
* @Description: des加密解密方法
|
|
|
* @Auther: shi kejing
|
|
|
* @Date: 2020/11/20 11:37
|
|
|
*/
|
|
|
public class DesUtil {
|
|
|
|
|
|
private final static String DES = "DES";
|
|
|
private final static String ENCODE = "GBK";
|
|
|
private final static String defaultKey = "abcdefghijklmnopqrstuvwxyz0123456789";
|
|
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
|
String data = "123456";
|
|
|
System.out.println(encrypt(data));
|
|
|
System.out.println(decrypt(encrypt(data)));
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 使用 默认key 加密
|
|
|
* @return String
|
|
|
*/
|
|
|
public static String encrypt(String data) throws Exception {
|
|
|
byte[] bt = encrypt(data.getBytes(ENCODE), defaultKey.getBytes(ENCODE));
|
|
|
String strs = new BASE64Encoder().encode(bt);
|
|
|
return strs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 使用 默认key 解密
|
|
|
* @return String
|
|
|
*/
|
|
|
public static String decrypt(String data) throws IOException, Exception {
|
|
|
if (data == null) {
|
|
|
return null;
|
|
|
}
|
|
|
BASE64Decoder decoder = new BASE64Decoder();
|
|
|
byte[] buf = decoder.decodeBuffer(data);
|
|
|
byte[] bt = decrypt(buf, defaultKey.getBytes(ENCODE));
|
|
|
return new String(bt, ENCODE);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Description 根据键值进行加密
|
|
|
*
|
|
|
* @param data
|
|
|
* @param key
|
|
|
* 加密键byte数组
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public static String encrypt(String data, String key) throws Exception {
|
|
|
byte[] bt = encrypt(data.getBytes(ENCODE), defaultKey.getBytes(ENCODE));
|
|
|
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 IOException,
|
|
|
Exception {
|
|
|
if (data == null) {
|
|
|
return null;
|
|
|
}
|
|
|
BASE64Decoder decoder = new BASE64Decoder();
|
|
|
byte[] buf = decoder.decodeBuffer(data);
|
|
|
byte[] bt = decrypt(buf, key.getBytes(ENCODE));
|
|
|
return new String(bt, ENCODE);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 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);
|
|
|
}
|
|
|
|
|
|
}
|