文档章节

Java使用Hutool实现AES、DES加密解密

路小磊
 路小磊
发布于 2017/08/07 19:29
字数 648
阅读 7K
收藏 192

介绍

AES和DES同属对称加密算法,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

在Java世界中,AES、DES加密解密需要使用Cipher对象构建加密解密系统,Hutool中对这一对象做再包装,简化了加密解密过程。

引入Hutool

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.1.2</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 = aes.encryptHex(content);
//解密为原字符串
String decryptStr = aes.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类,AESDES两个类是此类的简化表示。通过实例化这个类传入相应的算法枚举即可使用相同方法加密解密字符串或对象。

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);

© 著作权归作者所有

路小磊

路小磊

粉丝 432
博文 55
码字总数 42397
作品 5
呼和浩特
程序员
私信 提问
加载中

评论(21)

公孙二狗
公孙二狗

引用来自“路小磊”的评论

引用来自“公孙二狗”的评论

不知道是电脑问题还是啥,初始化很慢,例如调用 byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded(); 需要 5 秒,去掉这个,保存了 key,然后调用 DES des = SecureUtil.des(hexStringToByteArray(key)); 也需要 5 秒左右。

这么久?难道随机密码生成问题?这个我这边没法复现。而且Hutool只是包装jdk方法,你可以考虑查下相关资料
发现个问题,在 macOS 10.12 下慢,但是到虚拟机 CentOS7 里运行的话就很快了,环境问题。
公孙二狗
公孙二狗

引用来自“路小磊”的评论

引用来自“公孙二狗”的评论

不知道是电脑问题还是啥,初始化很慢,例如调用 byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded(); 需要 5 秒,去掉这个,保存了 key,然后调用 DES des = SecureUtil.des(hexStringToByteArray(key)); 也需要 5 秒左右。

这么久?难道随机密码生成问题?这个我这边没法复现。而且Hutool只是包装jdk方法,你可以考虑查下相关资料
把密码保存起来,直接调用这句 DES des = SecureUtil.des(hexStringToByteArray(key)) 也要 5s,明天换个机器试试。
路小磊
路小磊 博主

引用来自“公孙二狗”的评论

不知道是电脑问题还是啥,初始化很慢,例如调用 byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded(); 需要 5 秒,去掉这个,保存了 key,然后调用 DES des = SecureUtil.des(hexStringToByteArray(key)); 也需要 5 秒左右。

这么久?难道随机密码生成问题?这个我这边没法复现。而且Hutool只是包装jdk方法,你可以考虑查下相关资料
公孙二狗
公孙二狗
不知道是电脑问题还是啥,初始化很慢,例如调用 byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded(); 需要 5 秒,去掉这个,保存了 key,然后调用 DES des = SecureUtil.des(hexStringToByteArray(key)); 也需要 5 秒左右。
撒哈拉来的企鹅
撒哈拉来的企鹅

引用来自“J_sky”的评论

楼下贵姓?
姓贵没法免😜
沧海一刀
沧海一刀

引用来自“talent-tan”的评论

hutool是t-io御用工具库哦!小磊同学加油!
基情满满😁
飞天奔月
飞天奔月
feilong 发来贺电
熏小渼
熏小渼
所有项目都在使用糊涂工具类。赞一个。
小帅帅丶
小帅帅丶

引用来自“路小磊”的评论

引用来自“小帅帅丶”的评论

引用来自“路小磊”的评论

引用来自“小帅帅丶”的评论

我这有3DES SM2 SM3 SM4 用bc生成SM2数字证书的。需要加入不。Java
如果不依赖第三方可以考虑~~欢迎提给我~~

回复@路小磊 : 那不行。生成x509的证书必须依赖于BC包。

哈哈。你可以考虑自己开源作为项目。

回复@路小磊 : 嗯嗯。
路小磊
路小磊 博主

引用来自“小帅帅丶”的评论

引用来自“路小磊”的评论

引用来自“小帅帅丶”的评论

我这有3DES SM2 SM3 SM4 用bc生成SM2数字证书的。需要加入不。Java
如果不依赖第三方可以考虑~~欢迎提给我~~

回复@路小磊 : 那不行。生成x509的证书必须依赖于BC包。

哈哈。你可以考虑自己开源作为项目。
Java加密技术(二)——对称加密算法DES&AES

接下来我们介绍对称加密算法,最常用的莫过于DES数据加密算法。 DES DES-Data Encryption Standard,即数据加密算法。是IBM公司于1975年研究成功并公开发表的。DES算法的入口参数有三个:Key、...

mrliuze
2015/05/27
338
0
Node系统模块crypto实现md5 Cipher等多种加密方式

crypto加密模块是C/C++实现这些算法后,暴露为javascript接口的模块,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。Cipher Cipher类用于加密数据,属于对称密...

曲先森
2018/07/31
0
0
不同语言(如java,c#,c,c++)使用AES,DES,Base64效果都一样吗?

我想实现java环境下数据加密发送,将密钥发给接收方,接收方如果不使用java,使用其他语言能不能正确解密我利用AES或DES或Base64加密的数据呢?谢谢

电脑小童
2015/05/06
462
2
对称加密算法DES、3DES原理和实现方式

1、对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的...

zchuanzhao
2015/11/04
6.9K
0
Java学习手册:Java网络编程面试问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/MaybeForever/article/details/95471329 1、Java学习手册:Java基础知...

浩比浩比
2019/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

根据坐标和数据库记录坐标对比 按距离分页排序

$EARTH=6378.137; //地球半径 $PI=3.1415926535898; //PI值 //将要和数据库经纬度对比的坐标 $lng=34.15; $lat=36.073516; SELECT y.id, y.title, y.lat, y.lng, y.address, y.c......

sing-wa
33分钟前
56
0
Java 位运算符

https://java-er.com/blog/java-shit-operation/ Java位运算符(bitwise operators),应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)。 位运算符作用在所有...

月小升
33分钟前
70
0
聚类索引与非聚类索引

聚集索引的叶节点就是最终的数据节点,而非聚集索引的叶节仍然是索引节点,但它有一个指向最终数据的指针。

无名氏的程序员
38分钟前
74
0
Quick BI 新版地图来袭,报表展现分分钟变高级!

在BI产品的所有图表组件中,地图图表组件,由于其展示效果直观且生动,一直是报表中必不可少的部分。地图图表的插入,也可以立马让报表变得高大上,分分钟吸引老板的注意! 在这个风和日丽的好...

阿里云官方博客
38分钟前
67
0
在线办公第二周,还有哪些安全威胁待解决?

上周,为保障员工健康安全,大量企业开启在线办公模式。“云复工”第一周,在经历VPN接入需求暴增、视频会议因洪峰爆发出现卡顿掉线等“新状况”后,各类安全威胁也正在凸显。 疫情无情,安全...

baishancloud
42分钟前
92
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部