首页 > 开发 > Java > 正文

java使用Hex编码解码实现Aes加密解密功能示例

2024-07-13 10:02:45
字体:
来源:转载
供稿:网友

本文实例讲述了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[])这个方法!

希望本文所述对大家java程序设计有所帮助。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表