文档章节

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

路小磊
 路小磊
发布于 2017/08/07 19:29
字数 604
阅读 2777
收藏 193
点赞 9
评论 21

介绍

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

© 著作权归作者所有

共有 人打赏支持
路小磊

路小磊

粉丝 279
博文 53
码字总数 39918
作品 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包。

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

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

mrliuze
2015/05/27
0
0
Android外部文件加解密及应用实践

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

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

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

zchuanzhao
2015/11/04
0
0
Objective-C 和 Java 下 DES加解密保持一致的方式

最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,登录的密码要用DES加密,服务器是用Java开发的,客户端要同时支持多平台(Android、iOS),在处理iOS的DES加密...

山哥
2012/04/19
0
5
实现ios上传加密nodejs后台解密

今天在做项目的时候遇到一个问题,我需要在ios端把上传数据加密,防止中间代理捕获信息内容并修改数据库的信息。把数据传到后台在解码,实现数据安全。 下面介绍我实现的在nodejs的加密和解密...

90后爱国
2014/08/21
0
0
Java AES算法和openssl配对

近日工作上的原因,需要实现Java AES算法和C语言下基于openssl的AES 算法通信。这是个老问题了,网上搜到不少资料,但都不是很详细,没能解决问题。只能自己来了。 先说说AES算法。AES算法的...

gesuper
2013/11/04
0
4
Java DESede用C++ Openssl实现

最近在看一个项目的代码 开发语言:C++ 开发环境:VS2005 但有一个很别扭的地方,就是这个项目与外界的加密算法采用DESede,但其实现是采用jni调用java vm里面的函数。 查了一下,可以用Ope...

suit
2012/10/26
0
0
关于AES256算法java端加密,ios端解密出现无法解密问题的解决方案

我想关于AES算法大家应该都已经了解了,我就不多介绍了。这是本人第一次写技术博文,如果有不对之处欢迎大家指正,共同讨论,一起学习! 之前在项目上用到AES256加密解密算法,刚开始在java端...

Sun1009
2012/12/13
0
32
Java加密技术(三)——PBE算法

除了DES,我们还知道有DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法——PBE PBE PBE——Password-...

mrliuze
2015/05/27
0
0
解密JBoss和Weblogic数据源连接字符串和控制台密码

0x00 背景 现在越来越多的站喜欢用java语言的框架做web应用了,这里应用有很多大型站点经常采用jboss或者weblogic做web服务器。出于安 全原因,他们都提供把数据源连接密码以及web服务器后台...

BlAckEagle
2013/07/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部