Java使用Hutool实现AES、DES加密解密
Java使用Hutool实现AES、DES加密解密
路小磊 发表于9个月前
Java使用Hutool实现AES、DES加密解密
  • 发表于 9个月前
  • 阅读 2713
  • 收藏 193
  • 点赞 9
  • 评论 21

移动开发云端新模式探索实践 >>>   

摘要: 在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 = 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);
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
路小磊
粉丝 268
博文 53
码字总数 39918
作品 5
评论 (21)
J_sky
楼下贵姓?
帐号已封禁
免贵姓杨
小帅帅丶
我这有3DES SM2 SM3 SM4 用bc生成SM2数字证书的。需要加入不。Java
小白小霸王
文档好像没有更新, 想看看 布隆过滤器 用法
猫扑风铃
☘️
talent-tan
hutool是t-io御用工具库哦!小磊同学加油!
倚望离寻

引用来自“J_sky”的评论

楼下贵姓?
路小磊

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

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

引用来自“小白小霸王”的评论

文档好像没有更新, 想看看 布隆过滤器 用法
稍后更新~~
路小磊

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

hutool是t-io御用工具库哦!小磊同学加油!
:smiley:
小帅帅丶

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

回复@路小磊 : 嗯嗯。
蒲池幸子
所有项目都在使用糊涂工具类。赞一个。
飞天奔月
feilong 发来贺电
沧海一刀

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

hutool是t-io御用工具库哦!小磊同学加油!
基情满满:grin:
撒哈拉来的企鹅

引用来自“J_sky”的评论

楼下贵姓?
姓贵没法免:stuck_out_tongue_winking_eye:
公孙二狗
不知道是电脑问题还是啥,初始化很慢,例如调用 byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded(); 需要 5 秒,去掉这个,保存了 key,然后调用 DES des = SecureUtil.des(hexStringToByteArray(key)); 也需要 5 秒左右。
路小磊

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

不知道是电脑问题还是啥,初始化很慢,例如调用 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 秒左右。

这么久?难道随机密码生成问题?这个我这边没法复现。而且Hutool只是包装jdk方法,你可以考虑查下相关资料
把密码保存起来,直接调用这句 DES des = SecureUtil.des(hexStringToByteArray(key)) 也要 5s,明天换个机器试试。
×
路小磊
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: