摘要加密工具 - Digester
# 摘要加密工具 - Digester
简介
摘要算法是一种不可逆的加密算法,主要用于生成数据的唯一摘要值,通常用于数据完整性验证和数字签名。摘要算法的特点是:无论输入的数据长度是多少,经过算法计算后输出的摘要值长度是固定的。通过这种算法,即使原始数据仅有细微改变,生成的摘要值也会完全不同。由于摘要算法是不可逆的,因此无法从摘要值还原出原始数据。它主要应用于数据校验、文件完整性检测和密码存储等场景。
# 1. Hutool 支持的摘要算法
在不引入第三方库的情况下,Hutool 支持 JDK 原生的几种常见摘要算法,包括:
- MD2
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA-512
此外,Hutool 也支持国密算法 SM3,但需要引入 Bouncy Castle
库作为支持。
# 2. 使用 Digester
进行摘要计算
以 MD5 为例,Digester
类可以方便地进行数据的摘要计算。
# 示例:使用 Digester
进行 MD5 摘要计算
import cn.hutool.crypto.digest.Digester;
import cn.hutool.crypto.digest.DigestAlgorithm;
public class DigesterExample {
public static void main(String[] args) {
// 创建 Digester 对象,指定 MD5 算法
Digester md5 = new Digester(DigestAlgorithm.MD5);
// 待计算的字符串
String testStr = "Hello, Hutool!";
// 计算摘要值并转换为十六进制表示
String digestHex = md5.digestHex(testStr);
// 输出摘要值
System.out.println("MD5 摘要值: " + digestHex); // 结果示例:5393554e94bf0eb6436f240a4fd71282
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
new Digester(DigestAlgorithm algorithm)
:创建Digester
对象,指定摘要算法。algorithm
:使用的摘要算法(如DigestAlgorithm.MD5
、DigestAlgorithm.SHA256
等)。- 返回值:返回
Digester
对象,支持摘要计算。
digestHex(String data)
:计算字符串数据的摘要值,并将结果转换为十六进制字符串。data
:待计算的字符串。- 返回值:返回计算后的摘要值(十六进制字符串)。
作用: 适用于生成数据的摘要值,用于验证数据完整性或生成唯一标识符。
实际开发场景: 在文件完整性验证、密码存储、数据校验等场景中,MD5 摘要算法被广泛应用。
# 3. 使用 DigestUtil
进行简化操作
DigestUtil
是 Hutool 提供的更简化的工具类,封装了常用的摘要算法,如 MD5、SHA-1 等。
# 示例:使用 DigestUtil
进行 MD5 摘要计算
import cn.hutool.crypto.digest.DigestUtil;
public class DigestUtilExample {
public static void main(String[] args) {
// 待计算的字符串
String testStr = "Hello, Hutool!";
// 计算 MD5 摘要值
String md5Hex = DigestUtil.md5Hex(testStr);
// 输出摘要值
System.out.println("MD5 摘要值: " + md5Hex); // 结果示例:5393554e94bf0eb6436f240a4fd71282
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
DigestUtil.md5Hex(String data)
:直接计算字符串数据的 MD5 摘要值,并将结果转换为十六进制字符串。data
:待计算的字符串。- 返回值:返回计算后的 MD5 摘要值(十六进制字符串)。
作用: 适用于快速生成 MD5 摘要值,简化了 Digester
的使用流程。
# 4. 国密算法 SM3
Hutool 通过引入 Bouncy Castle
库,支持国密算法 SM3。SM3 是一种广泛应用于金融和政务领域的摘要算法,具有较高的安全性。
# 示例:使用 SM3 进行摘要计算
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.crypto.digest.Digester;
public class Sm3Example {
public static void main(String[] args) {
// 创建 SM3 摘要计算对象
Digester sm3 = DigestUtil.digester("sm3");
// 待计算的字符串
String testStr = "aaaaa";
// 计算摘要值并转换为十六进制表示
String digestHex = sm3.digestHex(testStr);
// 输出摘要值
System.out.println("SM3 摘要值: " + digestHex); // 结果示例:136ce3c86e4ed909b76082055a61586af20b4dab674732ebd4b599eef080c9be
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DigestUtil.digester(String algorithm)
:根据指定算法创建摘要计算对象。algorithm
:摘要算法名称(如"sm3"
)。- 返回值:返回
Digester
对象,支持摘要计算。
作用: SM3 适用于高安全性需求的场景,广泛应用于金融和政务领域的数据完整性校验。
实际开发场景: 在国内的金融和政务系统中,SM3 通常用于生成数据摘要,以确保数据在传输或存储过程中的完整性。