*加密解密類
*
*
*
*/
package?com.abacus.common?;
import?java.security.?*;
import?javax.crypto.?*;
/**
*加密解密類
*/
public?class?Eryptogram?
{
????private?static?String?Algorithm?="DES";
????//定義加密算法,可用DES,DESede,Blowfish
?????static?boolean?debug?=false?;
????/**
????*構造子註解.
????*/
????public?Eryptogram?()
????{
????}
????/**
????*生成密鑰
????*@returnbyte[]返回生成的密鑰
????*@throwsexception扔出異常.
????*/
????public?static?byte?[]getSecretKey?()throws?Exception?
????{
????????KeyGenerator?keygen?=KeyGenerator.getInstance?(Algorithm?);
????????SecretKey?deskey?=keygen.generateKey?();
????????if?(debug?)System.out.println?("生成密鑰:"+byte2hex?(deskey.getEncoded?()));
????????return?deskey.getEncoded?();
????}
????/**
????*將指定的數據根據提供的密鑰進行加密
????*@paraminput需要加密的數據
????*@paramkey密鑰
????*@returnbyte[]加密後的數據
????*@throwsException
????*/
????public?static?byte?[]encryptData?(byte?[]input?,byte?[]key?)throws?Exception?
????{
????????SecretKey?deskey?=new?javax.crypto.spec.SecretKeySpec?(key?,Algorithm?);
????????if?(debug?)
????????{
????????????System.out.println?("加密前的二進串:"+byte2hex?(input?));
????????????System.out.println?("加密前的字符串:"+new?String?(input?));
????????}
????????Cipher?c1?=Cipher.getInstance?(Algorithm?);
????????c1.init?(Cipher.ENCRYPT_MODE?,deskey?);
????????byte?[]cipherByte?=c1.doFinal?(input?);
????????if?(debug?)System.out.println?("加密後的二進串:"+byte2hex?(cipherByte?));
????????return?cipherByte?;
????}
????/**
????*將給定的已加密的數據通過指定的密鑰進行解密
????*@paraminput待解密的數據
????*@paramkey密鑰
????*@returnbyte[]解密後的數據
????*@throwsException
????*/
????public?static?byte?[]decryptData?(byte?[]input?,byte?[]key?)throws?Exception?
????{
????????SecretKey?deskey?=new?javax.crypto.spec.SecretKeySpec?(key?,Algorithm?);
????????if?(debug?)System.out.println?("解密前的信息:"+byte2hex?(input?));
????????Cipher?c1?=Cipher.getInstance?(Algorithm?);
????????c1.init?(Cipher.DECRYPT_MODE?,deskey?);
????????byte?[]clearByte?=c1.doFinal?(input?);
????????if?(debug?)
????????{
????????????System.out.println?("解密後的二進串:"+byte2hex?(clearByte?));
????????????System.out.println?("解密後的字符串:"+(new?String?(clearByte?)));
????????}
????????return?clearByte?;
????}
????/**
????*字節碼轉換成16進制字符串
????*@parambyte[]b輸入要轉換的字節碼
????*@returnString返回轉換後的16進制字符串
????*/
????public?static?String?byte2hex?(byte?[]b?)
????{
????????String?hs?="";
????????String?stmp?="";
????????for?(int?n?=0?;n?<b.length?;n?++)
????????{
????????????stmp?=(java.lang.Integer.toHexString?(b?[n?]&0XFF?));
????????????if?(stmp.length?()==1?)hs?=hs?+"0"+stmp?;
????????????else?hs?=hs?+stmp?;
????????????if?(n?<b.length?-1?)hs?=hs?+":";
????????}
????????return?hs.toUpperCase?();
????}
????public?static?void?main?(String?[]args?)
????{
????????try?
????????{
????????????debug?=false?;
????????????Eryptogram?etg?=new?Eryptogram?();
????????????byte?[]key?=etg.getSecretKey?();
????????????System.out.println?("key="+key?);
????????????String?aa?="1234567";
????????????byte?[]data?=aa.getBytes?();
????????????System.out.println?(data?);
????????????byte?[]en?=etg.encryptData?(data?,key?);
????????????System.out.println?("encryptData="+new?String?(en?));
????????????byte?[]de?=etg.decryptData?(en?,key?);
????????????System.out.println?("decryptData="+new?String?(de?));
????????}
????????catch?(Exception?e?)
????????{
????????????e.printStackTrace?();
????????}
????}
}