java使用Hex编码解码实现Aes加密解密功能示例
程序员文章站
2024-03-09 11:25:05
本文实例讲述了java使用hex编码解码实现aes加密解密功能。分享给大家供大家参考,具体如下:
这里的aes加密解密方法使用hex进行了编码解码
packag...
本文实例讲述了java使用hex编码解码实现aes加密解密功能。分享给大家供大家参考,具体如下:
这里的aes加密解密方法使用hex进行了编码解码
package com.baidu.wallet.bdwallet.utils; import java.io.unsupportedencodingexception; import java.security.invalidkeyexception; import java.security.nosuchalgorithmexception; import javax.crypto.badpaddingexception; import javax.crypto.cipher; import javax.crypto.illegalblocksizeexception; import javax.crypto.nosuchpaddingexception; import javax.crypto.spec.secretkeyspec; import org.apache.commons.codec.decoderexception; import org.apache.commons.codec.binary.hex; public class test { private static final string aes="aes"; private static final string utf8="utf-8"; /** * aes加密 * @param content * @param pkey * @return * @throws decoderexception */ private static byte[] encrypt(string content, string pkey) throws decoderexception { try { string private_key=pkey; byte[] encodeformat=null; try { //秘钥 hex解码为什么秘钥要进行解码,因为秘钥是某个秘钥明文进行了hex编码后的值,所以在使用的时候要进行解码 encodeformat = hex.decodehex(private_key.tochararray()); } catch (decoderexception e) { e.printstacktrace(); } secretkeyspec key = new secretkeyspec(encodeformat, aes); // cipher对象实际完成加密操作 cipher cipher = cipher.getinstance("aes/ecb/pkcs5padding"); // 加密内容进行编码 byte[] bytecontent = content.getbytes(utf8); // 用密匙初始化cipher对象 cipher.init(cipher.encrypt_mode, key); // 正式执行加密操作 byte[] result = cipher.dofinal(bytecontent); return result; } catch (nosuchalgorithmexception e) { e.printstacktrace(); } catch (nosuchpaddingexception e) { e.printstacktrace(); } catch (invalidkeyexception e) { e.printstacktrace(); } catch (unsupportedencodingexception e) { e.printstacktrace(); } catch (illegalblocksizeexception e) { e.printstacktrace(); } catch (badpaddingexception e) { e.printstacktrace(); } return null; } /** * aes解密 * @param contents * @param password * @return * @throws decoderexception */ private static byte[] decrypt(string contents, string password) throws decoderexception { try { //密文使用hex解码 byte[]content = hex.decodehex(contents.tochararray()); //秘钥 hex解码为什么秘钥要进行解码,因为秘钥是某个秘钥明文进行了hex编码后的值,所以在使用的时候要进行解码 byte[] encodeformat = hex.decodehex(password.tochararray()); secretkeyspec key = new secretkeyspec(encodeformat, aes); // cipher对象实际完成加密操作 cipher cipher = cipher.getinstance(aes); // 用密匙初始化cipher对象 cipher.init(cipher.decrypt_mode, key); // 正式执行解密操作 byte[] result = cipher.dofinal(content); return result; } catch (nosuchalgorithmexception e) { e.printstacktrace(); } catch (nosuchpaddingexception e) { e.printstacktrace(); } catch (invalidkeyexception e) { e.printstacktrace(); } catch (illegalblocksizeexception e) { e.printstacktrace(); } catch (badpaddingexception e) { e.printstacktrace(); } return null; } /** * aes加密 * @param context 明文 * @param private_key 秘钥 * @return * @throws decoderexception */ public static string encryption(string context,string private_key) throws decoderexception{ //加密后的明文也就变成了密文 byte[] encryptresult = encrypt(context, private_key); //密码文hex编码 string encryptresultstr = hex.encodehexstring(encryptresult); return encryptresultstr; } /** * aes解密 * @param context 密文 * @param private_key 秘钥 * @return * @throws decoderexception * @throws unsupportedencodingexception */ public static string decryption(string context,string private_key) throws decoderexception, unsupportedencodingexception{ //这里的密文解密前先进行了hex解码 byte[] decryptresult = decrypt(context, private_key); string result = new string(decryptresult, utf8); return result; } public static void main(string[] args) throws unsupportedencodingexception, decoderexception { //加密内容 string content = "123456787654321"; //aes加密解密秘钥 string password = "这个值一般都是给定的,双发都知道"; // 加密 system.out.println("加密前:" + content); // 调用加密方法 string encryptresultstr = encryption(content, password); system.out.println("加密后:" + encryptresultstr); // 调用解密方法 string result = 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/createstrongpassword
迅雷、快车、旋风url加密/解密工具:
在线散列/哈希算法加密工具:
在线md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:
在线sha1/sha224/sha256/sha384/sha512加密工具:
希望本文所述对大家java程序设计有所帮助。
上一篇: Java棋类游戏实践之中国象棋
下一篇: php批量修改表结构实例