文档章节

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

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

介绍

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

© 著作权归作者所有

共有 人打赏支持
路小磊

路小磊

粉丝 311
博文 53
码字总数 40548
作品 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”的评论

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

哈哈。你可以考虑自己开源作为项目。
Node系统模块crypto实现md5 Cipher等多种加密方式

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

曲先森
07/31
0
0
Java加密技术(二)——对称加密算法DES&AES

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

mrliuze
2015/05/27
0
0
使用Hutool处理RSA等非对称加密

介绍 Hutool工具是一个国产开源Java工具集,旨在简化Java开发中繁琐的过程,Hutool-crypto模块便是针对JDK加密解密做了大大简化。 此文主要介绍利用Hutool-crypto简化非对称加密解密。 对于非...

路小磊
2017/08/24
0
22
Android外部文件加解密及应用实践

有这样的应用场景,当我们把一些重要文件放到asset文件夹中时,把.apk解压是可以直接拿到这个文件的,一些涉及到重要信息的文件我们并不想被反编译拿去,这个时候需要先对文件进行加密,然后...

C6C
05/08
0
0
对称加密算法DES、3DES原理和实现方式

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

zchuanzhao
2015/11/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jQuery学习笔记180923

jQuery 操作 CSS jQuery 拥有若干进行 CSS 操作的方法。我们将学习下面这些: addClass() - 向被选元素添加一个或多个类 removeClass() - 从被选元素删除一个或多个类 toggleClass() - 对被选...

颖伙虫
25分钟前
0
0
[python] colorama 模块 - 改变控制台输出文本的颜色

除了使用 PyQt 这样的图形化开发框架外,基本上 python 程序都是跑在控制台中的。很多时候,单纯使用黑白的文字不能很好地突出我们要显示的信息。有时候我们需要将错误的提示使用红色标注,而...

cometeme
30分钟前
0
0
Makefile 学习 2 - 基于若干 Blog 的汇总

基于若干 Blog 汇总的 makefile 教程 陈皓 https://blog.csdn.net/haoel/article/details/2886 Makefile 进阶 1. Makefile 中的内容 显式规则。显式规则说明了,如何生成一个或多的的目标文件...

公孙衍
46分钟前
0
0
NIO与BIO的区别、NIO的运行原理和并发使用场景

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的...

Java干货分享
今天
1
0
72.告警系统邮件引擎 运行告警系统

20.23/20.24/20.25 告警系统邮件引擎 20.26 运行告警系统 20.23/20.24/20.25 告警系统邮件引擎 邮件首先要有一个mail.py,以下。 因为我们之前zabbix的时候做过,就可以直接拷贝过来 mail.s...

王鑫linux
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部