java 使用 Hex 编码解码实现 Aes 加密解密功能示例
这里有新鲜出炉的 Java 设计模式, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了 java 使用 Hex 编码解码实现 Aes 加密解密功能, 结合完整实例形式分析了 Aes 加密解密功能的定义与使用方法, 需要的朋友可以参考下
本文实例讲述了 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[])这个方法!
来源: http://www.phperz.com/article/18/0213/358943.html