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程序设计有所帮助。