HMAC(Hash-based Message Authentication Code)是一种带密钥的消息认证码,定义在 RFC 2104。下面重点说明写法规则。
HMAC的书写语法
- 密钥要足够长、随机,并保密,不能写进前端公开代码
- 比较 HMAC 必须用常量时间比较,防止时序攻击
- 约定字符集(建议 UTF-8)和输出格式(十六进制或 Base64)
- 不要把密钥和消息拼在一起直接哈希来“代替”HMAC,那不是 HMAC
示例
输入:密钥 "key",消息 <b>粗体</b>
计算结果:0b1cc15da412776afe64d1221ece92de429124c33dde206fa87aef71ea511692
说明:HMAC-SHA256,密钥与消息均按 UTF-8 字节计算。
与相关技术的区别
普通哈希没有密钥,任何人都能计算;HMAC 必须持有密钥才能生成正确值。HMAC 与加密不同:消息本身仍是明文。JWT 的 HS256 使用 HMAC,RS256 则使用非对称签名,两者不可混用。
JavaScript 示例
下面是 JavaScript 中处理HMAC的常用写法:
const enc = new TextEncoder();
const key = await crypto.subtle.importKey("raw", enc.encode("key"), {name:"HMAC", hash:"SHA-256"}, false, ["sign"]);
const buf = await crypto.subtle.sign("HMAC", key, enc.encode("abc"));运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
本站的HMAC计算工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【“key”+“abc”的 HMAC-SHA256 是多少?】9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab。
【JWT 的 HS256 是 HMAC 吗?】是,即 HMAC-SHA256 作用于 header.payload。
【HMAC 能当加密用吗?】不能。它只生成认证码,不隐藏原文。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。
标签: 数码开发