Hutool-crypto加密解密

article/2025/11/11 1:45:42

文章目录

  • 1. 介绍
  • 2. 加密分类
  • 3. crypto模块整体介绍
  • 4. 摘要加密(Digest)
    • 4.1 间接
    • 4.2 使用
  • 5. 对称加密(Symmetric)
    • 5.1 介绍
    • 5.2 使用
  • 6. 非对称加密(Asymmetric)
    • 6.1 介绍
    • 6.2 使用
  • 7. 国密算法(SM)

1. 介绍

在Java开发的过程中,很多场景下都需要加密解密。

比如对敏感数据的加密,对配置文件信息的加密,通信数据的加密等等。

今天介绍的是Hutool工具包中的加密模块 crypto

2. 加密分类

加密分为三类:

  • 对称加密(symmetric)

    常用的有AES、DES

  • 非对称加密(asymmetric)

    常用的有RSA,DSA

  • 摘要加密(digest)

    常用的有MD5,SHA-1

3. crypto模块整体介绍

在这里插入图片描述

  • 秘钥工具
  • 加密解密工具
  • BCUtil
  • 国密算法SmUtil
    在这里插入图片描述

4. 摘要加密(Digest)

4.1 间接

摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入设么长度的原始数据,讲过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则进行某种形式的提取,这种提取就是摘要,比摘要的数据与元数据有密切联系。只要源数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的额算法便能够对数据完整性提供健全的保证

但是,由于输出的密文是提取元数据经过处理的定长值,所以他已经不能还原为原数据,即消息摘要算法是不可逆的。理论上无法通过反向运算取得元数据内容。因此他通常值能被用来做数据的完整性验证

4.2 使用

这主要介绍md5加密

基本使用

/***  md5的基本使用*      生成32位的密文*/
@Test
public void MD5BasicTest() {System.out.println(new String(DigestUtil.md5("testaaa")));// 返回16进制形式  de2ec3065687316991579e6b9e6ce143System.out.println(DigestUtil.md5Hex("testaa"));
}

加盐、加盐位置、摘要次数

/***  md5的高级使用*      加盐  加盐的位置  摘要次数*/
@Test
public void MD5Test() {// 加盐  加盐的位置  摘要次数String salt = "md5Salt";int index = 0;int count = 2;MD5 md5 = new MD5(salt.getBytes(StandardCharsets.UTF_8), index, count);// 返回16进制格式System.out.println(md5.digestHex("testaa"));;
}

5. 对称加密(Symmetric)

5.1 介绍

对称加密(也就私钥加密),指加密和解密使用相同秘钥的加密算法。有时又叫传统密码算法,就是加密米哟啊能够从解密秘钥中推算出来,同时秘钥也可以从加密秘钥中推算出来。而在大多数的对称算法中,加密秘钥和解密秘钥是相同的,所以也成这种算法为私密秘钥算法或者单秘钥算法。

她要求发送方和接收方在安全通信之前,商定一个秘钥。

对称算法的安全性依赖于秘钥,泄露秘钥就意味着任何人都可以对他们发送和接收的消息进行解密,所以秘钥的保密性对通信的安全性至关重要。

5.2 使用

这儿介绍AES

基本使用

/*** 简单使用,直接使用秘钥加密解密*/
@Test
public void AESBasicTest() {// 生成秘钥,也可以手动指定byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();// 构建SymmetricCrypto symmetricCrypto = new SymmetricCrypto(SymmetricAlgorithm.AES, key);// 加密System.out.println(new String(symmetricCrypto.encrypt("testaa")));// 生成16进制格式的System.out.println(symmetricCrypto.encryptHex("testaa"));// 解密System.out.println(new String(symmetricCrypto.decrypt(symmetricCrypto.encrypt("testaa"))));// 直接解密字符串System.out.println(symmetricCrypto.decryptStr(symmetricCrypto.encryptHex("testaa")));
}

高级使用

/*** AES 高级使用*      mode – 模式Mode*      padding – Padding补码方式*      key – 密钥,支持三种密钥长度:128、192、256位*      iv – 偏移向量,加盐   必须16位**  缺点,受到iv的影响,加密的字符串要么为空,要么为16位以上*/
@Test
public void AESTest() {// 生成秘钥,也可以手动指定byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();String iv = "testiv0000000000";AES aes = new AES(Mode.CTS, Padding.PKCS5Padding, key, iv.getBytes(StandardCharsets.UTF_8));// 加密System.out.println(aes.encryptHex("testaa1234567899"));// 解密System.out.println(aes.decryptStr(aes.encrypt("testaa1234567899")));
}

6. 非对称加密(Asymmetric)

6.1 介绍

对于非对称加密,最常用的就是RSA和DSA

非堆成加密有公钥和私钥两个概念,私钥自己拥有,公钥公开。根据应用的不同,我们可以选择使用不同的秘钥进行加密

  1. 签名:使用私钥加密,公钥解密。用于让所有公钥的所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改,但是不是用来保证内容不被他人获得的
  2. 加密:用公钥加密,私钥解密。用于向公钥所有者发布星系,这个信息可能被他们篡改,但是无法被他人获取

6.2 使用

这儿介绍RSA

基本使用

/*** 基本使用*/
@Test
public void RSABasicTest() {RSA rsa = new RSA();// 获取公钥和私钥System.out.println(rsa.getPublicKey());System.out.println(rsa.getPrivateKeyBase64());System.out.println(rsa.getPrivateKey());System.out.println(rsa.getPrivateKeyBase64());// 私钥加密,公钥解密System.out.println(new String(rsa.encrypt("testaa", KeyType.PrivateKey)));System.out.println(new String(rsa.decrypt(rsa.encrypt("testaa", KeyType.PrivateKey), KeyType.PublicKey)));// 公钥加密,私钥解密System.out.println(new String(rsa.encrypt("testaa", KeyType.PublicKey)));System.out.println(new String(rsa.decrypt(rsa.encrypt("testaa", KeyType.PublicKey), KeyType.PrivateKey)));
}

高级使用

/*** 高级使用*  自定义生成 公钥和私钥*/
@Test
public void RSATest() {KeyPair keyPair = SecureUtil.generateKeyPair(AsymmetricAlgorithm.RSA.getValue());PrivateKey privateKey = keyPair.getPrivate();PublicKey publicKey = keyPair.getPublic();System.out.println(publicKey);System.out.println(privateKey);System.out.println("----------");RSA rsa = new RSA(privateKey, publicKey);// 私钥加密,公钥解密System.out.println(new String(rsa.encrypt("testaa", KeyType.PrivateKey)));System.out.println(new String(rsa.decrypt(rsa.encrypt("testaa", KeyType.PrivateKey), KeyType.PublicKey)));// 公钥加密,私钥解密System.out.println(new String(rsa.encrypt("testaa", KeyType.PublicKey)));System.out.println(new String(rsa.decrypt(rsa.encrypt("testaa", KeyType.PublicKey), KeyType.PrivateKey)));}

7. 国密算法(SM)

Hutool针对Bouncy Castle做了简化包装,用于实现国密算法中的SM2、SM3、SM4。

国密算法工具封装包括:

  • 非对称加密和签名:SM2
  • 摘要签名算法:SM3
  • 对称加密:SM4

国密算法需要引入Bouncy Castle库的依赖。

这不做介绍了


http://chatgpt.dhexx.cn/article/HtceK4Nt.shtml

相关文章

Python——Crypto库实现公钥加密私钥解密

目录 RSA介绍openssl生成公钥和私钥python实现生成公私钥PKCS1_v1_5包数据加密以及解密导入相关包数据加密数据解密效果展示 Crypto 模块提供了加密功能,包含对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。 本文主要是Crypto RSA算法加密。…

密钥,私钥,公钥的区分

首先明确几个基本概念: 1、密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。 2、公钥,公钥用来给数据加…

《推荐PlumGPT:一款优秀的聊天机器人》

PlumGPT是一款仿照ChatGPT的聊天机器人,它使用了最先进的自然语言处理技术来实现人机交互。PlumGPT不仅能够进行普通的对话,还可以回答各种问题,提供各种建议和信息。它能够对不同的话题做出详细的回答,例如科技、健康、娱乐、新闻…

中文聊天机器人

目录 一、项目介绍 wukong-robot介绍 特点 二、环境搭建 三、安装配置 四、录制唤醒词并使用机器人 要说当前最火的技术肯定就是人工智能和物联网了。 很多的厂家都不是从头到尾都自己实现的 截少了一块最后一个算法叫隐马尔可夫(都是人名的音译&#xff09…

我蒙了,这只猪会画画,一幅画就卖了17万.....

世界之大,无奇不有。 最近国外,有一头小猪热度很高,它名叫Pigcasso,中文是猪卡索, 就是这只↓ 很多人称它为“全世界最会画画的小猪”。 据报道,由猪卡索创作的作品——《狂野与自由》刚被一位德国买家看中…

我画我画我使劲画(3)

好久不见,上来清理一下历史遗留垃圾 这是我做的第一个作品,也是我迈出的第一步!回看两个月前的自己不禁感慨万分 2.书籍界面 2.1 主页面 2.2 阅读界面 2.3 vip章节购买 2.4 查看评论 2.5 作者专栏

用 Python 画自画像?看完我笑了

作者 | 李秋键 责编 | 晋兆雨 头图 | CSDN下载自视觉中国 引言:人脸图像的生成在各个行业有着重要应用,例如刑事调查、人物设计、教育培训等。然而一幅逼真的人脸肖像,对于职业画家也要至少数小时才能绘制出来;对于从未接触过绘画…

python turtle画熊-Python turtle画图库画姓名实例

*****看一下我定义的change()和run()函数****** 绘图坐标体系: 作用:设置主窗体的大小和位置 ? 1 turtle.setup(width, height, startx, starty) #width : 窗口宽度,若值是整数&#xff…

用Python画佩奇完整版

用Python画佩奇完整版 文章完全是依照这篇博客写的 啥是佩奇,Python 告诉你! 想把这篇博客完善一下,大致没有多大变化,从本质来说就加个身体的函数,由于本人水平有限,编译的代码有点繁琐,希望大…

用Java画城堡_一分钟简笔画—跟我一起画城堡 大师来详解

我们可以用简笔画,一分钟画出一个城堡。因为是一分钟就需要画出来,所以我们需要用一些简单的图形,来组成城堡的样子,如果过于复杂是无法画出城堡的。下面小编就教大家用简笔画的方法,跟我一起一分钟画出城堡。 工具/材…

教你学画画03---如何用 Python Turtle 绘制画带有云彩的彩虹

在之前的博客中我们做了 满星螺旋今天我们将画一条带有一些云彩的彩虹。这个对孩子们来说应该特别有趣,因为我们将绘制明亮的颜色和快乐的物体 设置画面 要设置舞台,让我们首先配置画布的高度和宽度。我们需要screensize命令来设置窗口的大小,以及setworldcoordinates命令…

使用Python Turtle画一个小人发射爱心

最近刚开始学Python Turtle,尝试着画了一个发射爱心的小人,这是效果图: 以下是代码段: import turtle as t #画人的脑袋和躯干 t.speed(0) t.penup() t.goto(-100,100) t.pendown() t.pensize(3) t.circle(50) t.right(90) t.forward(100) …

心形函数用计算机怎么画,怎么用几何画板画爱心,真神奇!

原标题:怎么用几何画板画爱心,真神奇! 爱心的形状除了能用一些普通的画图工具绘制,还可以借助强大的几何绘图软件——几何画板,千万不要以为几何画板只能画一些基本几何图形,其实它的功能强大着呢。 其实在…

你画过哪些好玩儿的作品?

CJQtime ,搬砖师在读 韦易笑、 朱炫、 ze ran 等 18453 人赞同 进知乎两年了,一直是个透明人,从来不问不答,只是看到自己喜欢的答案会点个赞而已。基友在 身边有个会画画的朋友是怎样的体验? - 艺术发了些我平时瞎画的…

教你用Python画一个漫画版谷爱凌~

最近各大社交媒体可是被谷爱凌给刷屏了,就在2月8日上午,她在北京冬奥会自由式滑雪女子大跳台比赛中获得冠军,以从未在赛场尝试过的高难度动作获得了全场最高分。 不仅如此,谷爱凌在17岁时就已经拥有了六十多枚奖牌,仅在…

教你怎么画出一幅印象派的画

如何把一张图片变成一幅印象派画作呢? 日本东京的Reiichiro Nakano小哥哥开源了一个项目,画富士山、大本钟,金门大桥……风格温暖美丽,令人着迷。 不论是山川建筑,还是萌物爱宠,都可以用蜡笔一样的质感&am…

【报名】AIGC带来无限可能!数据猿携手业界大咖聚焦大模型热点问题|数据猿直播...

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 进入2023年,ChatGPT就像一阵春雷,惊醒了人们对于人工智能快要沉睡的热情。不少科技企业都对外宣称自己有ChatGPT产品,或者正在开发ChatGPT产品,更大量企业则在想方设法接入Cha…

国外大学生用AI写论文,还次次拿到A

大学生用 AI 写论文,次次拿 A 近日,国外大学生 Urdadgirl69 在 Reddit 上发帖称,自己利用 AI 写论文、完成电影和书的观后感作业,门门功课拿到了 A。Urdadgirl69 表示,一开始,自己还有点羞愧,但…

中国算力总规模全球第二,如何实现算力的技术升维?

光子盒研究院出品 近日,人民日报记者从工信部了解到,近年来,我国算力产业年增长率近30%,算力总规模位居全球第二。 工信部数据显示,截至去年底,我国算力总规模达到180EFLOPS(每秒18000京次浮点运…