欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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