import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
public class DESEncryptUtil {
private static final String PASSWORD_CRYPT_KEY = "_yeyo@z&$975@ga(";
private final static String DES = "DES";
/**
*
* 加密
*
* @param src
* 数据源
*
* @param key
* 密钥,长度必须是8的倍数
*
* @return 返回加密后的数据
*
* @throws Exception
*/
public static byte[] encrypt(byte[] src,byte[] key )throws Exception{
// DES算法要求有一个可信任的随机数源
SecureRandom sr=new SecureRandom();
// 从原始密匙数据创建DESKeySpec对象
DESKeySpec dks=new DESKeySpec(key);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory=SecretKeyFactory.getInstance(DES);
SecretKey secretKey=keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher=Cipher.getInstance(DES);
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, secretKey ,sr);
// 现在,获取数据并加密
// 正式执行加密操作
return cipher.doFinal(src);
}
/**
*
* 解密
*
* @param src
* 数据源
*
* @param key
* 密钥,长度必须是8的倍数
*
* @return 返回解密后的原始数据
*
* @throws Exception
*/
public static byte[] decrypt(byte[] src , byte[] key)throws Exception{
//des算法要求有一个可信任的随机源
SecureRandom sr=new SecureRandom();
//从原始密钥创建一个DESKeySpec对象
DESKeySpec dks=new DESKeySpec(key);
//创建一个密钥工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory=SecretKeyFactory.getInstance(DES);
SecretKey secretKey=keyFactory.generateSecret(dks);
//cipher实现完成解密操作
Cipher cipher=Cipher.getInstance(DES);
//用密钥初始化cipher对象
cipher.init(Cipher.DECRYPT_MODE,secretKey,sr);
// 现在,获取数据并加密
// 正式执行解密操作
return cipher.doFinal(src);
}
/**
*
* 密码加密
*
* @param data
*
* @return
*
* @throws Exception
*/
public final static String encrypt(String password){
try {
return byte2hex(encrypt(password.getBytes("UTF-8"),
PASSWORD_CRYPT_KEY.getBytes("UTF-8")));
} catch (Exception e) {
}
return null;
}
/**
*
* 密码解密
*
* @param data
*
* @return
*
* @throws Exception
*/
public final static String decrypt(String data) {
try {
return new String(decrypt(hex2byte(data.getBytes("UTF-8")),
PASSWORD_CRYPT_KEY.getBytes("UTF-8")));
} catch (Exception e) {
}
return null;
}
/**
*
* 二行制转字符串
*
* @param b
*
* @return
*/
public static String byte2hex(byte[] b){
String hs="";
String stmp="";
for(int i=0;i<b.length;i++){
stmp=java.lang.Integer.toHexString(b[i] & 0XFF);
if(stmp.length() == 1)
hs=hs+"0"+stmp;
else
hs=hs+stmp;
}
return hs.toUpperCase();
}
public static byte[] hex2byte(byte[] b){
if((b.length % 2) !=0)
throw new IllegalArgumentException("长度不是偶数");
byte[] b2=new byte[b.length /2];
for(int i=0;i<b.length;i+=2){
String item=new String(b,i,2);
b2[i/2]=(byte) Integer.parseInt(item, 16);
}
return b2;
}
}