//算法密匙,这里先定义为空 下面给他赋值
private static byte[] DES_KEY =null;
@Override
public String Mkey(String keypwd,String data) {
//这里赋值 keypwd 是 自定义的密钥,长度为8 例如“abc12345” 小于8报错(也有说自动补0的,
//不过我运行是报错的),大于8个 是取前8
//将字符转为byte格式
DES_KEY=keypwd.getBytes();
String encryptedData = null;
try {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
DESKeySpec deskey = new DESKeySpec(DES_KEY);
// 创建一个密匙工厂,然后用它把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 = new sun.misc.BASE64Encoder().encode(cipher.doFinal(data.getBytes()));
} catch (Exception e) {
throw new RuntimeException("加密错误,错误信息:", e);
}
return encryptedData;
}
--------------------------- 解密---------------------------
@Override
public String Jkey(String keypwd,String cryptData) {
//这里赋值 keypwd 是 自定义的密钥,长度为8 例如“abc12345” 小于8报错(也有说自动补0的,
//不过我运行是报错的),大于8个 是取前8
//将字符转为byte格式
DES_KEY=keypwd.getBytes();
String decryptedData = null;
try {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
DESKeySpec deskey = new DESKeySpec(DES_KEY);
// 创建一个密匙工厂,然后用它把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(new sun.misc.BASE64Decoder().decodeBuffer(cryptData)));
} catch (Exception e) {
// log.error("解密错误,错误信息:", e);
throw new RuntimeException("解密错误,错误信息:", e);
}
return decryptedData;
}
main方法调用一下
keyService keyService = new keyServiceImpl();
String key="qwert123";
String data="qaz12345";
String s1 = keyService.Mkey(key,data);
System.out.println("加密后"+s1);
String s2=keyService.Jkey(key,s1);
System.out.println("解密后"+s2);
测试结果
加密后 EwgUHB5xgG/UE2ah6yfDvw==
解密后 qaz12345