1 public class AES256Util {
2
3 /**
4 * 密钥, 256位32个字节
5 */
6 public static final String DEFAULT_SECRET_KEY = "uBdUx82vPHkDKb284d7NkjFoNcKWBuka";
7
8 private static final String AES = "AES";
9
10 /**
11 * 初始向量IV, 初始向量IV的长度规定为128位16个字节, 初始向量的来源为随机生成.
12 */
13 private static final byte[] KEY_VI = "c558Gq0YQK2QUlMc".getBytes();
14
15 /**
16 * 加密解密算法/加密模式/填充方式
17 */
18 private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
19
20 private static java.util.Base64.Encoder base64Encoder = java.util.Base64.getEncoder();
21 private static java.util.Base64.Decoder base64Decoder = java.util.Base64.getDecoder();
22
23 static {
24 java.security.Security.setProperty("crypto.policy", "unlimited");
25 }
26
27 /**
28 * AES加密
29 */
30 public static String encode(String key, String content) {
31 try {
32 javax.crypto.SecretKey secretKey = new javax.crypto.spec.SecretKeySpec(key.getBytes(), AES);
33 javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(CIPHER_ALGORITHM);
34 cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, secretKey, new javax.crypto.spec.IvParameterSpec(KEY_VI));
35
36 // 获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
37 byte[] byteEncode = content.getBytes(java.nio.charset.StandardCharsets.UTF_8);
38
39 // 根据密码器的初始化方式加密
40 byte[] byteAES = cipher.doFinal(byteEncode);
41
42 // 将加密后的数据转换为字符串
43 return base64Encoder.encodeToString(byteAES);
44 } catch (Exception e) {
45 e.printStackTrace();
46 }
47 return null;
48 }
49
50 /**
51 * AES解密
52 */
53 public static String decode(String key, String content) {
54 try {
55 javax.crypto.SecretKey secretKey = new javax.crypto.spec.SecretKeySpec(key.getBytes(), AES);
56 javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(CIPHER_ALGORITHM);
57 cipher.init(javax.crypto.Cipher.DECRYPT_MODE, secretKey, new javax.crypto.spec.IvParameterSpec(KEY_VI));
58
59 // 将加密并编码后的内容解码成字节数组
60 byte[] byteContent = base64Decoder.decode(content);
61 // 解密
62 byte[] byteDecode = cipher.doFinal(byteContent);
63 return new String(byteDecode, java.nio.charset.StandardCharsets.UTF_8);
64 } catch (Exception e) {
65 e.printStackTrace();
66 }
67 return null;
68 }
69
70 public static void main(String[] args) {
71 String dbPassword = "123456";
72 String encryptDbPwd = AES256Util.encode(DEFAULT_SECRET_KEY, dbPassword);
73 System.out.println("encrypt: " + encryptDbPwd);
74
75 String decrypt = AES256Util.decode(DEFAULT_SECRET_KEY, encryptDbPwd);
76 System.out.println("decrypt:" + decrypt);
77 }
78
79 }

Java-AES256加密Util的更多相关文章

  1. bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能

    xmlrpc .  https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...

  2. Java 前端加密传输后端解密以及验证码功能

    目录(?)[-] 加密解密 1 前端js加密概述 2 前后端加密解密 21 引用的js加密库 22 js加密解密 23 Java端加密解密PKCS5Padding与js的Pkcs7一致 验证码 1 概 ...

  3. C# 实现 JAVA AES加密解密[原创]

    以下是网上普遍能收到的JAVA AES加密解密方法. 因为里面用到了KeyGenerator 和 SecureRandom,但是.NET 里面没有这2个类.无法使用安全随机数生成KEY. 我们在接收J ...

  4. C#与Java同步加密解密DES算法

    在实际项目中,往往前端和后端使用不同的语言.比如使用C#开发客户端,使用Java开发服务器端.有时出于安全性考虑需要将字符加密传输后,由服务器解密获取.本文介绍一种采用DES算法的C#与Java同步加 ...

  5. Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密

    Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...

  6. 【转】 java RSA加密解密实现

    [转] java RSA加密解密实现 该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar 下载地址:http://download.csdn.net/detai ...

  7. (转)java源程序加密解决方案(基于Classloader解密)

    转:http://cjnetwork.iteye.com/blog/851544 源程序加密解决方案 1. 概述: Java源程序的加密,有如下两种: 1使用混淆器对源码进行混淆,降低反编译工具的作用 ...

  8. js和java MD5加密

    项目中用到js MD5加密和后台java MD5加密,刚开始加密后两个不一致,网上找了好久终于找到一个啦,记下来: md5.js /* * A JavaScript implementation of ...

  9. PHP、Java对称加密中的AES加密方法

    PHP AES加密 <?php ini_set('default_charset','utf-8'); class AES{ public $iv = null; public $key = n ...

  10. Java Base64加密、解密原理Java代码

    Java Base64加密.解密原理Java代码 转自:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是 ...

随机推荐

  1. MSSQL执行超大.sql脚本

    1.打开mssql安装路径:找到Microsoft SQL Server Management Studio的图标,点击右键属性>打开文件位置 2.在安装路径下打开cmd控制台 3.输入命令: ...

  2. 问题:为啥explain 后type=all

    最近在学习mysql 调优,学习explain执行计划,为了模拟出type=system或const,我创建了一张表test(id,name),id为主键,里面放了一条数据 执行 EXPLAIN SE ...

  3. 数据驱动之 python + requests + Excel

    数据驱动 是根据数据来测试的,如读取 excel表中的测试用例自动填写测试结果,发送测试报告 包括以下模块: 1.获取用例 2.调用接口 3.校验结果 4.发送测试报告 5.异常处理 6.日志模块 1 ...

  4. linux添加分辨率

    由于屏幕分辨率是1920X1080,但是虚拟机中的centos的分辨率设置中没有这个值,因此需要添加一个.在终端中输入如下命令:1.cvt 1920 1080得到: # 1920x1080 59.96 ...

  5. [Swift] SwiftUI布局的一些写法基础(用Swift构造UI布局)

    这个文档是在你 完全熟悉 Objective-C 上用代码构造UI的前提下写的 官方教程:https://developer.apple.com/tutorials/swiftui/creating- ...

  6. 性能测试-top-实时显示系统中各个进程的资源占用状况, 也可以查看线程

    1.top命令介绍 top命令是Linux系统中常用的性能分析工具,可以实时地查看系统的运行情况,比如内存.CPU.负载以及各个进程的资源占用情况 top界面主要分为两个部分,前5行展示的是系统的整体 ...

  7. 由于CVE-2020-10770漏洞,k8s集群升级keycloak 8.0.0-->15.0.0(由于15.0.0最近又出安全漏洞,升级为16.0.0)

    背景 前段时间项目组用到的8.0.0版本的keycloak被安全部门同事扫出来一个中危漏洞: A flaw was found in Keycloak, where it is possible to ...

  8. git的相关命令

    1.将文件添加至版本库的暂存区(stage)的命令是git add 1.1.  添加完所有有被修改的文件:git add . 1.2. 添加指定文件:git add 指定文件 2.将文件提交至本地仓库 ...

  9. Linux常用命令-Java web环境

    Linux 常用命令 大部分命令推荐sudo运行 端口和PID互查 # 根据端口查询PID $ lsof -i:8080 # 根据端口查询PID $ fuser -i 8080/tcp # 根据PID ...

  10. 从零搭建hadoop集群之安装jdk

    卸载系统自带的OpenJDK以及相关的java文件 1. 查询系统自带的OpenJDK版本信息 [root@hadoop01 ~]# java -version #查询系统自带的OpenJDK版本信息 ...