package com.util;
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* DES算法
*/
@SuppressWarnings("restriction")
public class DESUtil {
private static String CHARSETNAME = "UTF-8";
private static String ALGORITHM = "DES";
//加密函数
public static String getEncryptString(String str,String keyStr) {
BASE64Encoder base64encoder = new BASE64Encoder();
try {
Key key = getKey(keyStr);
//按utf-8编码
byte[] bytes = str.getBytes(CHARSETNAME);
//获取加密对象
Cipher cipher = Cipher.getInstance(ALGORITHM);
//初始化加密信息
cipher.init(Cipher.ENCRYPT_MODE, key);
//加密
byte[] doFinal = cipher.doFinal(bytes);
//byte to encode好的String返回
return base64encoder.encode(doFinal);
} catch (Exception e) {
// TODO: handle exception
throw new RuntimeException(e);
}
}
//解密函数
public static String getDecryptString(String str,String keyStr) {
//接受byte[]并转换成String
BASE64Decoder base64decoder = new BASE64Decoder();
try {
Key key = getKey(keyStr);
//将String变成byte
byte[] bytes = base64decoder.decodeBuffer(str);
//获取解密对象
Cipher cipher = Cipher.getInstance(ALGORITHM);
//初始化解密信息
cipher.init(Cipher.DECRYPT_MODE, key);
//解密
byte[] doFinal = cipher.doFinal(bytes);
//返回解密信息
return new String(doFinal, CHARSETNAME);
} catch (Exception e) {
// TODO: handle exception
throw new RuntimeException(e);
}
}
public static Key getKey(String keyStr){
Key key;
try {
//生成DES算法对象
KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);
//运用SHA1安全策略
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
//设置密钥种子
secureRandom.setSeed(keyStr.getBytes());
//初始化基于SHA1的算法对象
generator.init(secureRandom);
//生成密钥对象
key = generator.generateKey();
generator = null;
} catch (Exception e) {
throw new RuntimeException(e);
}
return key;
}
public static void main(String[] args) {
System.out.println(getEncryptString("123456","System1_System2_2024"));
System.out.println(getDecryptString(getEncryptString("123456","System1_System2_2024"),"System1_System2_2024"));
}
}
02-24
718
