DES算法

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; 
} 
} 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值