java使用Hex编码解码实现Aes加密解密功能示例
本文实例讲述了java使用Hex编码解码实现Aes加密解密功能。分享给大家供大家参考,具体如下:
这里的Aes加密解密方法使用Hex进行了编码解码
packagecom.baidu.wallet.bdwallet.utils;
importjava.io.UnsupportedEncodingException;
importjava.security.InvalidKeyException;
importjava.security.NoSuchAlgorithmException;
importjavax.crypto.BadPaddingException;
importjavax.crypto.Cipher;
importjavax.crypto.IllegalBlockSizeException;
importjavax.crypto.NoSuchPaddingException;
importjavax.crypto.spec.SecretKeySpec;
importorg.apache.commons.codec.DecoderException;
importorg.apache.commons.codec.binary.Hex;
publicclassTest{
privatestaticfinalStringAES="AES";
privatestaticfinalStringUTF8="UTF-8";
/**
*AES加密
*@paramcontent
*@parampkey
*@return
*@throwsDecoderException
*/
privatestaticbyte[]encrypt(Stringcontent,Stringpkey)throwsDecoderException{
try{
Stringprivate_key=pkey;
byte[]encodeFormat=null;
try{
//秘钥Hex解码为什么秘钥要进行解码,因为秘钥是某个秘钥明文进行了Hex编码后的值,所以在使用的时候要进行解码
encodeFormat=Hex.decodeHex(private_key.toCharArray());
}catch(DecoderExceptione){
e.printStackTrace();
}
SecretKeySpeckey=newSecretKeySpec(encodeFormat,AES);
//Cipher对象实际完成加密操作
Ciphercipher=Cipher.getInstance("AES/ECB/PKCS5Padding");
//加密内容进行编码
byte[]byteContent=content.getBytes(UTF8);
//用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE,key);
//正式执行加密操作
byte[]result=cipher.doFinal(byteContent);
returnresult;
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(NoSuchPaddingExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}catch(IllegalBlockSizeExceptione){
e.printStackTrace();
}catch(BadPaddingExceptione){
e.printStackTrace();
}
returnnull;
}
/**
*AES解密
*@paramcontents
*@parampassword
*@return
*@throwsDecoderException
*/
privatestaticbyte[]decrypt(Stringcontents,Stringpassword)throwsDecoderException{
try{
//密文使用Hex解码
byte[]content=Hex.decodeHex(contents.toCharArray());
//秘钥Hex解码为什么秘钥要进行解码,因为秘钥是某个秘钥明文进行了Hex编码后的值,所以在使用的时候要进行解码
byte[]encodeFormat=Hex.decodeHex(password.toCharArray());
SecretKeySpeckey=newSecretKeySpec(encodeFormat,AES);
//Cipher对象实际完成加密操作
Ciphercipher=Cipher.getInstance(AES);
//用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE,key);
//正式执行解密操作
byte[]result=cipher.doFinal(content);
returnresult;
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(NoSuchPaddingExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(IllegalBlockSizeExceptione){
e.printStackTrace();
}catch(BadPaddingExceptione){
e.printStackTrace();
}
returnnull;
}
/**
*Aes加密
*@paramcontext明文
*@paramprivate_key秘钥
*@return
*@throwsDecoderException
*/
publicstaticStringencryption(Stringcontext,Stringprivate_key)throwsDecoderException{
//加密后的明文也就变成了密文
byte[]encryptResult=encrypt(context,private_key);
//密码文Hex编码
StringencryptResultStr=Hex.encodeHexString(encryptResult);
returnencryptResultStr;
}
/**
*Aes解密
*@paramcontext密文
*@paramprivate_key秘钥
*@return
*@throwsDecoderException
*@throwsUnsupportedEncodingException
*/
publicstaticStringdecryption(Stringcontext,Stringprivate_key)throwsDecoderException,UnsupportedEncodingException{
//这里的密文解密前先进行了Hex解码
byte[]decryptResult=decrypt(context,private_key);
Stringresult=newString(decryptResult,UTF8);
returnresult;
}
publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException,DecoderException{
//加密内容
Stringcontent="123456787654321";
//AES加密解密秘钥
Stringpassword="这个值一般都是给定的,双发都知道";
//加密
System.out.println("加密前:"+content);
//调用加密方法
StringencryptResultStr=encryption(content,password);
System.out.println("加密后:"+encryptResultStr);
//调用解密方法
Stringresult=decryption(encryptResultStr,password);
//解密内容进行解码
System.out.println("解密后:"+result);
}
}
这个方法在正式的项目中已经在使用木有问题,注意这里的AES加密解密你要要对哦……
上面使用的就是org.apache.commons.codec.binary.Hex这个类的方法,在maven中配置如下:
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.4</version> </dependency>
注意:这里要使用1.4以及以上版本,应为1.4以下的没有Hex.encodeHexString(byte[])这个方法!
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
密码安全性在线检测:
http://tools.jb51.net/password/my_password_safe
高强度密码生成器:
http://tools.jb51.net/password/CreateStrongPassword
迅雷、快车、旋风URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder
在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
希望本文所述对大家java程序设计有所帮助。