java密码加密与解密.docx
- 文档编号:29965005
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:16
- 大小:18.46KB
java密码加密与解密.docx
《java密码加密与解密.docx》由会员分享,可在线阅读,更多相关《java密码加密与解密.docx(16页珍藏版)》请在冰豆网上搜索。
java密码加密与解密
java密码加密与解密
2013-04-2914:
24:
53 我来说两句 作者:
红豆糕
收藏
我要投稿
以下两个类可以很方便的完成字符串的加密和解密:
加密:
CryptHelper.encrypt(password)
解密:
CrypHelper.decrypt(password)
代码如下:
CryptUtils.java
[java]
packagecom.gdie.lab.crypt;
importjava.io.IOException;
importjavax.crypto.Cipher;
importjavax.crypto.KeyGenerator;
importjavax.crypto.SecretKey;
importcom.sun.org.apache.xerces.internal.impl.dv.util.Base64;
publicclassCryptUtils{
privatestaticStringAlgorithm="DES";
privatestaticbyte[]DEFAULT_KEY=newbyte[]{-53,122,-42,-88,-110,-123,-60,-74};
privatestaticStringVALUE_ENCODING="UTF-8";
/**
*生成密钥
*
*@returnbyte[]返回生成的密钥
*@throwsexception
* 扔出异常.
*/
publicstaticbyte[]getSecretKey()throwsException{
KeyGeneratorkeygen=KeyGenerator.getInstance(Algorithm);
SecretKeydeskey=keygen.generateKey();
//if(debug)System.out.println("生成密钥:
"+byte2hex(deskey.getEncoded
//()));
returndeskey.getEncoded();
}
/**
*将指定的数据根据提供的密钥进行加密
*
*@paraminput
* 需要加密的数据
*@paramkey
* 密钥
*@returnbyte[]加密后的数据
*@throwsException
*/
publicstaticbyte[]encryptData(byte[]input,byte[]key)throwsException{
SecretKeydeskey=newjavax.crypto.spec.SecretKeySpec(key,Algorithm);
//if(debug)
//{
//System.out.println("加密前的二进串:
"+byte2hex(input));
//System.out.println("加密前的字符串:
"+newString(input));
//
//}
Cipherc1=Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE,deskey);
byte[]cipherByte=c1.doFinal(input);
//if(debug)System.out.println("加密后的二进串:
"+byte2hex(cipherByte));
returncipherByte;
}
publicstaticbyte[]encryptData(byte[]input)throwsException{
returnencryptData(input,DEFAULT_KEY);
}
/**
*将给定的已加密的数据通过指定的密钥进行解密
*
*@paraminput
* 待解密的数据
*@paramkey
* 密钥
*@returnbyte[]解密后的数据
*@throwsException
*/
publicstaticbyte[]decryptData(byte[]input,byte[]key)throwsException{
SecretKeydeskey=newjavax.crypto.spec.SecretKeySpec(key,Algorithm);
//if(debug)System.out.println("解密前的信息:
"+byte2hex(input));
Cipherc1=Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE,deskey);
byte[]clearByte=c1.doFinal(input);
//if(debug)
//{
//System.out.println("解密后的二进串:
"+byte2hex(clearByte));
//System.out.println("解密后的字符串:
"+(newString(clearByte)));
//
//}
returnclearByte;
}
publicstaticbyte[]decryptData(byte[]input)throwsException{
returndecryptData(input,DEFAULT_KEY);
}
/**
*字节码转换成16进制字符串
*
*@parambyte[]b输入要转换的字节码
*@returnString返回转换后的16进制字符串
*/
publicstaticStringbyte2hex(byte[]bytes){
StringBuilderhs=newStringBuilder();
for(byteb:
bytes)
hs.append(String.format("%1$02X",b));
returnhs.toString();
}
publicstaticbyte[]hex2byte(Stringcontent){
intl=content.length()>>1;
byte[]result=newbyte[l];
for(inti=0;i intj=i<<1; Strings=content.substring(j,j+2); result[i]=Integer.valueOf(s,16).byteValue(); } returnresult; } /** *将字节数组转换为base64编码字符串 *@parambuffer *@return */ publicstaticStringbytesToBase64(byte[]buffer){ //BASE64Encoderen=newBASE64Encoder(); returnBase64.encode(buffer); // returnencoder.encode(buffer); } /** *将base64编码的字符串解码为字节数组 *@paramvalue *@return *@throwsIOException */ publicstaticbyte[]base64ToBytes(Stringvalue)throwsIOException{ //returnBase64.decodeToByteArray(value); // System.out.println(decoder.decodeBuffer(value)); // returndecoder.decodeBuffer(value); returnBase64.decode(value); } /** *加密给定的字符串 *@paramvalue *@return加密后的base64字符串 */ publicstaticStringencryptString(Stringvalue){ returnencryptString(value,DEFAULT_KEY); } /** *根据给定的密钥加密字符串 *@paramvalue待加密的字符串 *@paramkey以BASE64形式存在的密钥 *@return加密后的base64字符串 *@throwsIOException */ publicstaticStringencryptString(Stringvalue,Stringkey)throwsIOException{ returnencryptString(value,base64ToBytes(key)); } /** *根据给定的密钥加密字符串 *@paramvalue待加密的字符串 *@paramkey字节数组形式的密钥 *@return加密后的base64字符串 */ publicstaticStringencryptString(Stringvalue,byte[]key){ try{ byte[]data=value.getBytes(VALUE_ENCODING); data=CryptUtils.encryptData(data,key); returnbytesToBase64(data); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); returnnull; } } /** *解密字符串 *@paramvaluebase64形式存在的密文 *@return明文 */ publicstaticStringdecryptString(Stringvalue){ returndecryptString(value,DEFAULT_KEY); } /** *解密字符串 *@paramvaluebase64形式存在的密文 *@paramkeybase64形式存在的密钥 *@return明文 *@throwsIOException */ publicstaticStringdecryptString(Stringvalue,Stringkey)throwsIOException{ Strings=decryptString(value,base64ToBytes(key)); returns; } /** *解密字符串 *@paramvaluebase64形式存在的密文 *@paramkey字节数据形式存在的密钥 *@return明文 */ publicstaticStringdecryptString(Stringvalue,byte[]key){ try{ byte[]data=base64ToBytes(value); data=CryptUtils.decryptData(data,key); returnnewString(data,VALUE_ENCODING); }catch(Exceptione){ e.printStackTrace(); returnnull; } } } packagecom.gdie.lab.crypt; importjava.io.IOException; importjavax.crypto.Cipher; importjavax.crypto.KeyGenerator; importjavax.crypto.SecretKey; importcom.sun.org.apache.xerces.internal.impl.dv.util.Base64; publicclassCryptUtils{ privatestaticStringAlgorithm="DES"; privatestaticbyte[]DEFAULT_KEY=newbyte[]{-53,122,-42,-88,-110,-123,-60,-74}; privatestaticStringVALUE_ENCODING="UTF-8"; /** *生成密钥 * *@returnbyte[]返回生成的密钥 *@throwsexception * 扔出异常. */ publicstaticbyte[]getSecretKey()throwsException{ KeyGeneratorkeygen=KeyGenerator.getInstance(Algorithm); SecretKeydeskey=keygen.generateKey(); //if(debug)System.out.println("生成密钥: "+byte2hex(deskey.getEncoded //())); returndeskey.getEncoded(); } /** *将指定的数据根据提供的密钥进行加密 * *@paraminput * 需要加密的数据 *@paramkey * 密钥 *@returnbyte[]加密后的数据 *@throwsException */ publicstaticbyte[]encryptData(byte[]input,byte[]key)throwsException{ SecretKeydeskey=newjavax.crypto.spec.SecretKeySpec(key,Algorithm); //if(debug) //{ //System.out.println("加密前的二进串: "+byte2hex(input)); //System.out.println("加密前的字符串: "+newString(input)); // //} Cipherc1=Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE,deskey); byte[]cipherByte=c1.doFinal(input); //if(debug)System.out.println("加密后的二进串: "+byte2hex(cipherByte)); returncipherByte; } publicstaticbyte[]encryptData(byte[]input)throwsException{ returnencryptData(input,DEFAULT_KEY); } /** *将给定的已加密的数据通过指定的密钥进行解密 * *@paraminput * 待解密的数据 *@paramkey * 密钥 *@returnbyte[]解密后的数据 *@throwsException */ publicstaticbyte[]decryptData(byte[]input,byte[]key)throwsException{ SecretKeydeskey=newjavax.crypto.spec.SecretKeySpec(key,Algorithm); //if(debug)System.out.println("解密前的信息: "+byte2hex(input)); Cipherc1=Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE,deskey); byte[]clearByte=c1.doFinal(input); //if(debug) //{ //System.out.println("解密后的二进串: "+byte2hex(clearByte)); //System.out.println("解密后的字符串: "+(newString(clearByte))); // //} returnclearByte; } publicstaticbyte[]decryptData(byte[]input)throwsException{ returndecryptData(input,DEFAULT_KEY); } /** *字节码转换成16进制字符串 * *@parambyte[]b输入要转换的字节码 *@returnString返回转换后的16进制字符串 */ publicstaticStringbyte2hex(byte[]bytes){ StringBuilderhs=newStringBuilder(); for(byteb: bytes) hs.append(String.format("%1$02X",b)); returnhs.toString(); } publicstaticbyte[]hex2byte(Stringcontent){ intl=content.length()>>1; byte[]result=newbyte[l]; for(inti=0;i intj=i<<1; Strings=content.substring(j,j+2); result[i]=Integer.valueOf(s,16).byteValue(); } returnresult; } /** *将字节数组转换为base64编码字符串 *@parambuffer *@return */ publicstaticStringbytesToBase64(byte[]buffer){ //BASE64Encoderen=newBASE64Encoder(); returnBase64.encode(buffer); // returnencoder.encode(buffer); } /** *将base64编码的字符串解码为字节数组 *@paramvalue *@return *@throwsIOException */ publicstaticbyte[]base64ToByte
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 密码 加密 解密