消息认证码算法 - HMac
# 消息认证码算法 - HMac
简介
HMAC(Hash Message Authentication Code,散列消息鉴别码)是一种基于哈希函数和密钥生成消息认证码的算法。HMAC 利用哈希算法(如 MD5、SHA-1 等)和一个密钥生成消息摘要,用于验证消息在传输过程中是否被篡改。HMAC 常用于在两个共享密钥的实体之间进行消息认证,以确保消息的完整性和真实性。
Hutool 提供了对 HMAC 算法的封装,支持多种 HMAC 算法如 HmacMD5、HmacSHA256 等,方便开发者进行消息认证码的生成与验证。
# 1. Hutool 支持的 HMAC 算法
在不引入第三方库的情况下,Hutool 支持 JDK 原生的 HMAC 算法:
- HmacMD5
- HmacSHA1
- HmacSHA256
- HmacSHA384
- HmacSHA512
# 2. 使用 HMac
生成消息认证码
以 HmacMD5 为例,HMac
类可以方便地进行消息认证码的生成。
# 示例:使用 HMac
生成 HmacMD5 消息认证码
import cn.hutool.crypto.HMac;
import cn.hutool.crypto.digest.HmacAlgorithm;
public class HMacExample {
public static void main(String[] args) {
// 待计算的字符串
String testStr = "test中文";
// 密钥(注意:如果密钥包含非 ASCII 字符,请考虑编码问题)
byte[] key = "password".getBytes();
// 创建 HMac 对象,指定 HmacMD5 算法和密钥
HMac mac = new HMac(HmacAlgorithm.HmacMD5, key);
// 计算消息认证码并转换为十六进制表示
String macHex = mac.digestHex(testStr);
// 输出消息认证码
System.out.println("HmacMD5 认证码: " + macHex); // 结果示例:b977f4b13f93f549e06140971bded384
}
}
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
new HMac(HmacAlgorithm algorithm, byte[] key)
:创建HMac
对象,指定 HMAC 算法和密钥。algorithm
:使用的 HMAC 算法(如HmacAlgorithm.HmacMD5
、HmacAlgorithm.HmacSHA256
等)。key
:用于生成消息认证码的密钥字节数组。- 返回值:返回
HMac
对象,支持消息认证码的生成。
digestHex(String data)
:计算字符串数据的消息认证码,并将结果转换为十六进制字符串。data
:待计算的字符串。- 返回值:返回计算后的消息认证码(十六进制字符串)。
作用: HMAC 算法用于确保数据在传输过程中的完整性和真实性,广泛应用于安全通信、API 请求签名等场景。
实际开发场景: 在使用 HMAC 算法进行消息认证时,通常用于生成签名或验证消息的完整性,如在 API 请求中验证请求是否合法。
# 3. 扩展使用:支持更多 HMAC 算法
通过引入 Bouncy Castle
库,Hutool 可以支持更多 HMAC 算法。使用方式与内置算法类似。
# 示例:使用自定义 HMAC 算法
import cn.hutool.crypto.HMac;
public class HMacExample {
public static void main(String[] args) {
// 自定义 HMAC 算法名称
String algorithm = "HmacSHA512/224";
// 密钥
byte[] key = "password".getBytes();
// 创建 HMac 对象,指定自定义算法
HMac mac = new HMac(algorithm, key);
// 计算消息认证码并转换为十六进制表示
String macHex = mac.digestHex("test中文");
// 输出消息认证码
System.out.println(algorithm + " 认证码: " + macHex);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
new HMac(String algorithm, byte[] key)
:支持使用自定义算法名称创建 HMAC 对象。algorithm
:自定义 HMAC 算法名称(如"HmacSHA512/224"
)。key
:用于生成消息认证码的密钥字节数组。- 返回值:返回
HMac
对象,支持消息认证码的生成。
作用: 使用 Bouncy Castle
库扩展 HMAC 算法的选择范围,满足不同场景的需求。
实际开发场景: 在特定场景下可能需要使用一些标准库不支持的 HMAC 算法,这时可以引入 Bouncy Castle
进行扩展。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08