DES加密解密的工具类
程序员文章站
2022-03-12 19:36:32
...
package info.frady;
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;
public class DESUtil {
private static byte[] crypt(byte[] data, byte[] key, int mode) 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(mode, securekey, sr);
return cipher.doFinal(data);
}
/**
* DES解密
* @param 密文
* @return 明文
*/
public static String decryptString(String key, String data){
if (data == null || "".equals(data))
return "";
String str=null;
try {
str=new String(crypt(new BASE64Decoder().decodeBuffer(data), key.getBytes(),Cipher.DECRYPT_MODE));
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
/**
* 加密
* @param 明文
* @return 密文
*/
public static String encryptString(String key, String data){
if(data==null || "".equals(data))
return "";
String str=null;
try {
str=new BASE64Encoder().encode(crypt(data.getBytes(), key.getBytes(), Cipher.ENCRYPT_MODE));
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
}
测试代码如下:
String secretKey="thisisyoursecretkey,thismustbestrongenough";
String data="hello,world";
System.out.println("加密前:"+data);
String sdata=DESUtil.encryptString(secretKey,data);
System.out.println("加密后:"+sdata);
System.out.println("解密后:"+DESUtil.decryptString(secretKey,sdata));
输出结果:
加密前:hello,world
加密后:z6xNYOApTkFXqiXSFK1hzg==
解密后:hello,world
**保存到本地文件中,代码中保存加密后的内容
代码公开后,配置文件也不会暴漏敏感信息。
来源:http://www.hexcode.cn/article/show/encrypt-properties