签名和验证工具 - Sign
# 签名和验证工具 - Sign
简介
数字签名是一种用于验证数据完整性和真实性的技术。通过使用数字签名算法,可以生成数据的签名,并使用公钥进行验证。Sign
类是 Hutool 对 JDK java.security.Signature
类的封装,简化了数字签名的生成和验证流程。签名算法通常用于保证数据的完整性、不可否认性以及防止数据被篡改。
# 1. Hutool 支持的签名算法
Hutool 支持多种常见的签名算法,这些算法基于 JDK 的 Signature
实现。包括但不限于以下几种:
- NONEwithRSA
- MD2withRSA
- MD5withRSA
- SHA1withRSA
- SHA256withRSA
- SHA384withRSA
- SHA512withRSA
- NONEwithDSA
- SHA1withDSA
- NONEwithECDSA
- SHA1withECDSA
- SHA256withECDSA
- SHA384withECDSA
- SHA512withECDSA
# 2. 使用 Sign
生成和验证签名
以 MD5withRSA
为例,Sign
类提供了方便的 API 进行数据签名和验证。
示例:使用 Sign
生成和验证签名
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.Sign;
import cn.hutool.crypto.asymmetric.SignAlgorithm;
public class SignExample {
public static void main(String[] args) {
// 待签名的原始数据
byte[] data = "我是一段测试字符串".getBytes();
// 创建 Sign 对象,指定签名算法为 MD5withRSA
Sign sign = SecureUtil.sign(SignAlgorithm.MD5withRSA);
// 生成签名
byte[] signedData = sign.sign(data);
System.out.println("生成的签名: " + new String(signedData));
// 验证签名
boolean verify = sign.verify(data, signedData);
System.out.println("签名验证结果: " + verify); // true 表示验证通过
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SecureUtil.sign(SignAlgorithm algorithm)
:根据指定算法生成Sign
对象。algorithm
:使用的签名算法(如SignAlgorithm.MD5withRSA
、SignAlgorithm.SHA256withECDSA
等)。- 返回值:返回
Sign
对象,支持签名和验证操作。
sign(byte[] data)
:对数据生成数字签名。data
:待签名的数据(字节数组)。- 返回值:返回生成的签名(字节数组)。
verify(byte[] data, byte[] signature)
:验证数据的签名是否有效。data
:原始数据(字节数组)。signature
:要验证的签名(字节数组)。- 返回值:返回验证结果,
true
表示签名有效。
作用: 数字签名用于确保数据在传输或存储过程中未被篡改,广泛应用于身份认证、电子签名、合同签署等场景。
实际开发场景: 在电子签名、合同管理、身份验证等场景中,通常需要生成数据签名并进行验证,以确保数据的完整性和可信性。
# 3. 扩展使用:不同签名算法
通过 Sign
类,开发者可以选择适合自己应用场景的签名算法,如 SHA256withRSA
或 SHA1withDSA
。
# 使用 SHA256withRSA
生成和验证签名
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.Sign;
import cn.hutool.crypto.asymmetric.SignAlgorithm;
public class SignExample {
public static void main(String[] args) {
// 待签名的原始数据
byte[] data = "我是一段测试字符串".getBytes();
// 创建 Sign 对象,指定签名算法为 SHA256withRSA
Sign sign = SecureUtil.sign(SignAlgorithm.SHA256withRSA);
// 生成签名
byte[] signedData = sign.sign(data);
System.out.println("生成的签名: " + new String(signedData));
// 验证签名
boolean verify = sign.verify(data, signedData);
System.out.println("签名验证结果: " + verify); // true 表示验证通过
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SignAlgorithm.SHA256withRSA
:选择SHA256withRSA
算法进行签名和验证。- 作用:适用于高安全性需求的场景,如身份验证、数字证书、电子合同签署等。
作用: 选择合适的签名算法,可以平衡安全性和性能,满足不同应用场景的需求。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08