java中DES加密解密
废话不多说,直接奉上代码:
代码一
packagecom.eabax.plugin.yundada.utils;
importjava.io.IOException;
importjava.security.InvalidKeyException;
importjava.security.NoSuchAlgorithmException;
importjava.security.SecureRandom;
importjava.security.spec.InvalidKeySpecException;
importjavax.crypto.BadPaddingException;
importjavax.crypto.Cipher;
importjavax.crypto.IllegalBlockSizeException;
importjavax.crypto.NoSuchPaddingException;
importjavax.crypto.SecretKey;
importjavax.crypto.SecretKeyFactory;
importjavax.crypto.spec.DESKeySpec;
importorg.apache.commons.codec.binary.Base64;
importsun.misc.BASE64Decoder;
publicclassDESEncryptHelper{
privatefinalstaticStringDES="DES";
/**
*生成密钥
*@paramemployeeCode
*/
publicstaticStringgetDESKey(StringencryptStr){
if(!CacheManager.getCache().containsKey("encryptKey_"+encryptStr)){
CacheManager.getCache().put("encryptKey_"+encryptStr,encryptStr+"tablemiyaokey");
}
Stringkey=(String)CacheManager.getCache().get("encryptKey_"+encryptStr);
returnkey;
}
/**
*Description根据键值进行解密
*@paramdata
*@paramkey加密键byte数组
*@return
*@throwsIOException
*@throwsException
*/
publicstaticStringdecrypt(Stringdata,Stringkey)throwsIOException,
Exception{
if(data==null)
returnnull;
BASE64Decoderdecoder=newBASE64Decoder();
byte[]buf=decoder.decodeBuffer(data);
byte[]bt=decrypt(buf,key.getBytes());
returnnewString(bt);
}
/**
*对字符串加密
*@paramstr
*@return
*@throwsInvalidKeyException
*@throwsIllegalBlockSizeException
*@throwsBadPaddingException
*@throwsInvalidKeySpecException
*@throwsNoSuchAlgorithmException
*@throwsNoSuchPaddingException
*/
publicstaticStringgetEncryptStr(Stringstr,StringencryptStr)throwsInvalidKeyException,
IllegalBlockSizeException,BadPaddingException,
InvalidKeySpecException,NoSuchAlgorithmException,
NoSuchPaddingException{
//获取key
Stringkey=getDESKey(encryptStr);
//获取密钥
SecretKeyFactoryfactory=SecretKeyFactory.getInstance("DES");
DESKeySpeckeyspec=newDESKeySpec(key.getBytes());
SecretKeydeskey=factory.generateSecret(keyspec);
//Cipher负责完成加密或解密工作
Cipherc=Cipher.getInstance("DES");
//根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE,deskey);
byte[]src=str.getBytes();
//该字节数组负责保存加密的结果
byte[]cipherByte=c.doFinal(src);
Stringenstr=newString(Base64.encodeBase64(cipherByte));
returnenstr;
}
/**
*Description根据键值进行解密
*@paramdata
*@paramkey加密键byte数组
*@return
*@throwsException
*/
privatestaticbyte[]decrypt(byte[]data,byte[]key)throwsException{
//生成一个可信任的随机数源
SecureRandomsr=newSecureRandom();
//从原始密钥数据创建DESKeySpec对象
DESKeySpecdks=newDESKeySpec(key);
//创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance(DES);
SecretKeysecurekey=keyFactory.generateSecret(dks);
//Cipher对象实际完成解密操作
Ciphercipher=Cipher.getInstance(DES);
//用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE,securekey,sr);
returncipher.doFinal(data);
}
}
代码二
packagecom.sinosoft.olyvem.common;
importjava.security.SecureRandom;
importjavax.crypto.Cipher;
importjavax.crypto.SecretKey;
importjavax.crypto.SecretKeyFactory;
importjavax.crypto.spec.DESKeySpec;
importsun.misc.BASE64Encoder;
publicclassDES...{
privatebyte[]desKey;
publicDES(byte[]desKey)...{
this.desKey=desKey;
}
publicbyte[]doEncrypt(byte[]plainText)throwsException...{
//DES算法要求有一个可信任的随机数源
SecureRandomsr=newSecureRandom();
byterawKeyData[]=desKey;/**//*用某种方法获得密匙数据*/
//从原始密匙数据创建DESKeySpec对象
DESKeySpecdks=newDESKeySpec(rawKeyData);
//创建一个密匙工厂,然后用它把DESKeySpec转换成
//一个SecretKey对象
SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");
SecretKeykey=keyFactory.generateSecret(dks);
//Cipher对象实际完成加密操作
Ciphercipher=Cipher.getInstance("DES");
//用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE,key,sr);
//现在,获取数据并加密
bytedata[]=plainText;/**//*用某种方法获取数据*/
//正式执行加密操作
byteencryptedData[]=cipher.doFinal(data);
returnencryptedData;
}
publicbyte[]doDecrypt(byte[]encryptText)throwsException...{
//DES算法要求有一个可信任的随机数源
SecureRandomsr=newSecureRandom();
byterawKeyData[]=desKey;/**//*用某种方法获取原始密匙数据*/
//从原始密匙数据创建一个DESKeySpec对象
DESKeySpecdks=newDESKeySpec(rawKeyData);
//创建一个密匙工厂,然后用它把DESKeySpec对象转换成
//一个SecretKey对象
SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");
SecretKeykey=keyFactory.generateSecret(dks);
//Cipher对象实际完成解密操作
Ciphercipher=Cipher.getInstance("DES");
//用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE,key,sr);
//现在,获取数据并解密
byteencryptedData[]=encryptText;/**//*获得经过加密的数据*/
//正式执行解密操作
bytedecryptedData[]=cipher.doFinal(encryptedData);
returndecryptedData;
}
publicstaticvoidmain(String[]args)throwsException...{
Stringkey="FtpXPass";
Stringvalue="olympic";
BASE64Encoderbase64Encoder=newBASE64Encoder();
DESdesEncrypt=newDES(key.getBytes());
byte[]encryptText=desEncrypt.doEncrypt(value.getBytes());
//System.out.println("doEncrypt-"+toHexString(encryptText));
System.out.println("doEncrypt-"
+base64Encoder.encode(encryptText));
byte[]decryptText=desEncrypt.doDecrypt("r9NGYcKAtdo=".getBytes());
System.out.println("doDecrypt-"+newString(decryptText));
//System.out.println("doDecrypt-"+toHexString(decryptText));
}
publicstaticStringtoHexString(byte[]value)...{
StringnewString="";
for(inti=0;i<value.length;i++)...{
byteb=value[i];
Stringstr=Integer.toHexString(b);
if(str.length()>2)...{
str=str.substring(str.length()-2);
}
if(str.length()<2)...{
str="0"+str;
}
newString+=str;
}
returnnewString.toUpperCase();
}
}
以上就是本文关于DES加密解密的代码了,希望对大家学习java有所帮助。