当前位置: 首页 > news >正文

JAVA AES加密解密工具类

import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

/**
 * @Author JCccc
 * @Description 测试 网站 http://tool.chacuo.net/cryptaes
 * @Date 2021/9/15 10:06
 */
public class AesUtil {
    private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";

    /**
     *  加密  key 需 16位
     * @param content
     * @param key
     * @return
     */
    public static String encrypt(String content, String key) {
        try {
            //获得密码的字节数组
            byte[] raw = key.getBytes();
            //根据密码生成AES密钥
            SecretKeySpec skey = new SecretKeySpec(raw, "AES");
            //根据指定算法ALGORITHM自成密码器
            Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
            //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥 16位
            cipher.init(Cipher.ENCRYPT_MODE, skey);
            //获取加密内容的字节数组(设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
            byte [] byte_content = content.getBytes("utf-8");
            //密码器加密数据
            byte [] encode_content = cipher.doFinal(byte_content);
            //将加密后的数据转换为Base64编码的字符串返回
            return Base64.encodeBase64String(encode_content);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 解密  key 需 16位
     * @param encryptStr
     * @param decryptKey
     * @return
     */
    public static String decrypt(String encryptStr, String decryptKey) {
        try {
            //获得密码的字节数组
            byte[] raw = decryptKey.getBytes();
            //根据密码生成AES密钥
            SecretKeySpec skey = new SecretKeySpec(raw, "AES");
            //根据指定算法ALGORITHM自成密码器
            Cipher cipher = Cipher.getInstance(ALGORITHMSTR);
            //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥
            cipher.init(Cipher.DECRYPT_MODE, skey);
            //把密文字符串Base64转回密文字节数组
            byte [] encode_content = Base64.decodeBase64(encryptStr);
            //密码器解密数据
            byte [] byte_content = cipher.doFinal(encode_content);
            //将解密后的数据转换为字符串返回
            return new String(byte_content,"utf-8");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

//    public static void main(String[] args) {
//        String str = encrypt("12345678", "abgfderfgt326854");
//        System.out.println(str);
//
//
//        String str2 = decrypt(str, "abgfderfgt326854");
//        System.out.println(str2);
//
//    }


}

相关文章:

  • Springboot 快速了解 事务回滚@Transactional
  • Springboot Mybatis使用pageHelper实现分页查询
  • JAVA 雪花算法 唯一ID生成工具类
  • 灵魂的拷问 怎么将代码写得让人无法维护?
  • 灵魂的拷问 Hashtable的命名
  • 运行ElasticSearch报错:uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException
  • JAVA 8 Stream 常用操作
  • JAVA 8 Stream优雅使用结合实战分析
  • mysql Error Code: 1175. You are using safe update mode and you tried to update a table without ....
  • SpringBoot 整合WebSocket 简单实战案例
  • Kafka Windows运行错误:找不到或无法加载主类 Files\kafka\kafka_2.12-2.0.0\libs\activation-1.1.1.ja r;C:\Program
  • Kafka Windows运行错误:创建消费者报错 consumer zookeeper is not a recognized option
  • Kafka Windows运行错误: Native memory allocation (mmap) failed to map 1073741824 bytes for Failed to comm
  • RedisUtils 操作五大集合 增删改查
  • Springboot 整合 SpringCloud组件-Feign(Ribbon/Hystrix) (三)
  • 10个确保微服务与容器安全的最佳实践
  • Android开源项目规范总结
  • canvas 五子棋游戏
  • input的行数自动增减
  • IOS评论框不贴底(ios12新bug)
  • Koa2 之文件上传下载
  • mongo索引构建
  • PHP 7 修改了什么呢 -- 2
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Python中eval与exec的使用及区别
  • Vue2.x学习三:事件处理生命周期钩子
  • 编写高质量JavaScript代码之并发
  • 关于extract.autodesk.io的一些说明
  • 讲清楚之javascript作用域
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端工程化(Gulp、Webpack)-webpack
  • 手机端车牌号码键盘的vue组件
  • 数据结构java版之冒泡排序及优化
  • 异步
  • 整理一些计算机基础知识!
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​力扣解法汇总946-验证栈序列
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #Spring-boot高级
  • (1)(1.13) SiK无线电高级配置(五)
  • (11)MSP430F5529 定时器B
  • (生成器)yield与(迭代器)generator
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (循环依赖问题)学习spring的第九天
  • (一)Java算法:二分查找
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转载)深入super,看Python如何解决钻石继承难题
  • . Flume面试题
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @synthesize和@dynamic分别有什么作用?
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [1] 平面(Plane)图形的生成算法