文档章节

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

路小磊
 路小磊
发布于 2017/08/07 19:29
字数 648
阅读 2966
收藏 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);

© 著作权归作者所有

共有 人打赏支持
路小磊

路小磊

粉丝 323
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

sed, awk 练习

1. sed打印某行到某行之间的内容 2. sed 转换大小写 将单词首字母转化大写 将所有小写转化大写 3. sed 在某一行最后面添加一个数字 4. 删除某行到最后一行 解析: {:a;N;$!ba;d} :a : 是...

Fc丶
今天
2
0
babel6升级到7,jest-babel报错:Requires Babel "^7.0.0-0", but was loaded with "6.26.3".

自从将前端环境更新到babel7,jest-babel之前是基于babel6的,执行时候就会报:Requires Babel "^7.0.0-0", but was loaded with "6.26.3". 很烦,因为连续帮好几台电脑修复这个问题,所以记...

曾建凯
今天
1
0
探索802.11ax

802.11ax承诺在真实条件下改善峰值性能和最差情况。 如何改善今天的Wi-Fi? 在决定如何改进当前版本以外的Wi-Fi时,802.11ac,IEEE和Wi-Fi联盟调查了Wi-Fi部署和行为,以确定更广泛使用的障碍...

linuxprobe16
今天
2
0
使用linux将64G的SDCARD格式化为FAT32

一、命令如下: sudo fdisk -lsudo mkfs.vfat /dev/sda -Isudo fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to wri......

mbzhong
今天
4
0
深入理解Plasma(四):Plasma Cash

这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章主要介绍在 Plasma 框架下的项目 Plasma Cash。 深入理解Plasma(1):...

HiBlock
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部