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

发布时间 - 2026-01-10 22:19:40    点击率:

本文实例讲述了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./password/my_password_safe

高强度密码生成器:
http://tools./password/CreateStrongPassword

迅雷、快车、旋风URL加密/解密工具:
http://tools./password/urlrethunder

在线散列/哈希算法加密工具:
http://tools./password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools./password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools./password/sha_encode

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


# java  # Hex  # 编码  # 解码  # Aes  # 加密  # 解密  # Java AES256加密解密示例代码  # java使用RSA与AES加密解密的实例代码详解  # Java使用Hutool实现AES、DES加密解密的方法  # Java使用AES加密和解密的实例详解  # Java AES加密解密的简单实现方法  # Java与Node.js利用AES加密解密出相同结果的方法示例  # Java实现的AES256加密解密功能示例  # java基于AES对称加密算法实现的加密与解密功能示例  # Android、iOS和Java通用的AES128加密解密示例代码  # JAVA中AES对称加密和解密过程  # Java AES加密和解密教程  # 加密解密  # 进行了  # 加密工具  # 都是  # 还可以  # 也就  # 你要  # 感兴趣  # 给大家  # 要对  # 所述  # 要使  # 程序设计  # 高强度  # 前先  # 变成了  # 讲述了  # UTF  # String 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel如何与Pusher实现实时通信?(WebSocket示例)  如何在腾讯云服务器上快速搭建个人网站?  南京网站制作费用,南京远驱官方网站?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  如何快速搭建虚拟主机网站?新手必看指南  Python文本处理实践_日志清洗解析【指导】  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  HTML 中动态设置元素 name 属性的正确语法详解  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  深圳网站制作的公司有哪些,dido官方网站?  JavaScript Ajax实现异步通信  如何在阿里云高效完成企业建站全流程?  轻松掌握MySQL函数中的last_insert_id()  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  音乐网站服务器如何优化API响应速度?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  如何快速查询网址的建站时间与历史轨迹?  b2c电商网站制作流程,b2c水平综合的电商平台?  如何在IIS中新建站点并解决端口绑定冲突?  昵图网官方站入口 昵图网素材图库官网入口  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  如何挑选最适合建站的高性能VPS主机?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  动图在线制作网站有哪些,滑动动图图集怎么做?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  BootStrap整体框架之基础布局组件  JS弹性运动实现方法分析  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  IOS倒计时设置UIButton标题title的抖动问题  Swift中switch语句区间和元组模式匹配  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  Laravel如何使用.env文件管理环境变量?(最佳实践)  在线制作视频网站免费,都有哪些好的动漫网站?  Android okhttputils现在进度显示实例代码  详解CentOS6.5 安装 MySQL5.1.71的方法  长沙做网站要多少钱,长沙国安网络怎么样?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  PHP 500报错的快速解决方法