HMAC(Hash-based Message Authentication Code)是一种带密钥的消息认证码,定义在 RFC 2104。下面重点说明适用与不适用。
HMAC的优点和限制
新系统优先 HMAC-SHA256 或 HMAC-SHA512;不要用 HMAC-MD5。若需要对外分发验证能力而不暴露签发密钥,应改用非对称签名(RSA、ECDSA、Ed25519)。
普通哈希没有密钥,任何人都能计算;HMAC 必须持有密钥才能生成正确值。HMAC 与加密不同:消息本身仍是明文。JWT 的 HS256 使用 HMAC,RS256 则使用非对称签名,两者不可混用。
示例
输入:密钥 "key",消息 a+b=c
计算结果:ba29d2e9ed96a38a614f76112049d435b7fd9466016ae6701b2cb318f331edf2
说明:HMAC-SHA256,密钥与消息均按 UTF-8 字节计算。
工作原理
HMAC(K,m)=H((K⊕opad) ∥ H((K⊕ipad) ∥ m)),其中 H 是底层哈希,ipad/opad 是固定填充。密钥长于一个分组时先哈希再使用。因此 HMAC 的安全性依赖于密钥的保密和底层哈希的强度。
乱码排查
结果只含十六进制或 Base64,本身不乱码。对不上时先打印双方实际使用的密钥长度和消息十六进制。
本站的HMAC计算工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【“key”+“abc”的 HMAC-SHA256 是多少?】9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab。
【JWT 的 HS256 是 HMAC 吗?】是,即 HMAC-SHA256 作用于 header.payload。
【HMAC 能当加密用吗?】不能。它只生成认证码,不隐藏原文。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。
标签: 数码开发