DES加密解密的工具类


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值