HMAC(Hash-based Message Authentication Code)是一种带密钥的消息认证码,定义在 RFC 2104。下面重点说明规范来源与要点。
HMAC依据的标准
- 密钥要足够长、随机,并保密,不能写进前端公开代码
- 比较 HMAC 必须用常量时间比较,防止时序攻击
- 约定字符集(建议 UTF-8)和输出格式(十六进制或 Base64)
- 不要把密钥和消息拼在一起直接哈希来“代替”HMAC,那不是 HMAC
示例
输入:密钥 "key",消息 https://www.123wen.cn/?q=测试
计算结果:ef4939c54494afd93aa5fc7d82b9b3de9fc27b5069ffaeef000f49766d6da5c2
说明:HMAC-SHA256,密钥与消息均按 UTF-8 字节计算。
命令行示例
# OpenSSL
echo -n "abc" | openssl dgst -sha256 -hmac "key"
# Python 见下文
常见报错
- 签名不一致:密钥、算法、字符集或是否含换行不一致
- TypeError:把字符串密钥和字节密钥混用,应统一编码
- JWT 校验失败:secret 不对或算法被切换
本站的HMAC计算工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【密钥多长合适?】至少与哈希输出相当,例如 HMAC-SHA256 建议 32 字节随机密钥。
【“key”+“abc”的 HMAC-SHA256 是多少?】9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab。
【JWT 的 HS256 是 HMAC 吗?】是,即 HMAC-SHA256 作用于 header.payload。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。
标签: 数码开发
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。