Java使用Hutool实现AES、DES加密解密的方法
作者:路小磊 时间:2021-06-03 16:49:57
在Java世界中,AES、DES加密解密需要使用Cipher对象构建加密解密系统,Hutool中对这一对象做再包装,简化了加密解密过程。
介绍
AES和DES同属对称加密算法,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
在Java世界中,AES、DES加密解密需要使用Cipher对象构建加密解密系统,Hutool中对这一对象做再包装,简化了加密解密过程。
引入Hutool
<dependency>
<groupId>com.xiaoleilu</groupId>
<artifactId>hutool-all</artifactId>
<version>3.0.9</version>
</dependency>
使用
AES加密解密
String content = "test中文";
//随机生成密钥
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
//构建
AES aes = SecureUtil.aes(key);
//加密
byte[] encrypt = aes.encrypt(content);
//解密
byte[] decrypt = aes.decrypt(encrypt);
//加密为16进制表示
String encryptHex = des.encryptHex(content);
//解密为原字符串
String decryptStr = des.decryptStr(encryptHex);
DES加密解密
DES的使用方式与AES基本一致
String content = "test中文";
//随机生成密钥
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded();
//构建
DES des = SecureUtil.des(key);
//加密解密
byte[] encrypt = des.encrypt(content);
byte[] decrypt = des.decrypt(encrypt);
//加密为16进制,解密为原字符串
String encryptHex = des.encryptHex(content);
String decryptStr = des.decryptStr(encryptHex);
更多
Hutool中针对JDK支持的所有对称加密算法做了封装,封装为SymmetricCrypto类,AES和DES两个类是此类的简化表示。通过实例化这个类传入相应的算法枚举即可使用相同方法加密解密字符串或对象。
Hutool支持的对称加密算法枚举有:
AES
ARCFOUR
Blowfish
DES
DESede
RC2
PBEWithMD5AndDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_40
这些枚举全部在SymmetricAlgorithm中被列举
对称加密对象的使用也非常简单:
String content = "test中文";
//随机生成密钥
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
//构建
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
//加密
byte[] encrypt = aes.encrypt(content);
//解密
byte[] decrypt = aes.decrypt(encrypt);
//加密为16进制表示
String encryptHex = aes.encryptHex(content);
//解密为字符串
String decryptStr = aes.decryptStr(encryptHex);
来源:https://my.oschina.net/looly/blog/1504160
标签:加密解密,des,java,AES
0
投稿
猜你喜欢
SpringBoot整合SpringSecurity实现JWT认证的项目实践
2022-06-23 22:09:09
Java中驼峰命名与下划线命名相互转换
2021-10-01 00:56:47
java 遍历request中的所有表单数据的实例代码
2021-10-21 11:19:26
Java Spring的核心与设计思想你知道吗
2021-08-30 11:18:03
JVM代码缓存区CodeCache原理及用法解析
2023-08-09 06:02:29
Flutter 状态管理的实现
2023-08-21 02:38:33
详解maven中profiles使用实现
2022-11-13 23:14:24
Java实现五子棋(附详细源码)
2023-10-19 15:20:54
解析android中的dip,dp,px,sp和屏幕密度
2023-09-26 20:44:38
Java concurrency线程池之线程池原理(二)_动力节点Java学院整理
2023-11-28 23:43:18
MyBatis 如何获取子类的属性
2022-09-12 14:42:39
Hibernate双向多对多映射关系配置代码实例
2022-12-26 22:30:30
Spring实现内置监听器
2021-07-06 01:29:06
Springboot Session共享实现原理及代码实例
2022-12-16 03:29:52
SpringBoot 实现自定义的 @ConditionalOnXXX 注解示例详解
2023-04-04 03:37:18
通过JDK源码角度分析Long类详解
2022-03-11 19:26:38
Linux下动静态库的打包与使用指南(C/C++)
2023-06-21 20:22:11
使用开源项目JAVAE2 进行视频格式转换
2023-11-08 07:18:24
Netty如何设置为Https访问
2021-12-06 02:00:40
Java 求解如何把二叉搜索树转换为累加树
2021-11-19 14:09:54