HMAC开发中的常见错误

29 0

HMAC(Hash-based Message Authentication Code)是一种带密钥的消息认证码,定义在 RFC 2104。下面重点说明报错与纠正。

HMAC开发中的常见错误

  • 签名不一致:密钥、算法、字符集或是否含换行不一致
  • TypeError:把字符串密钥和字节密钥混用,应统一编码
  • JWT 校验失败:secret 不对或算法被切换

示例

输入:密钥 "key",消息 123问

计算结果:712b7f4c7be55b4dcd667ec3af508293f60c537f34eefb8c1dd24250f0816370

说明:HMAC-SHA256,密钥与消息均按 UTF-8 字节计算。

规则说明

  • 密钥要足够长、随机,并保密,不能写进前端公开代码
  • 比较 HMAC 必须用常量时间比较,防止时序攻击
  • 约定字符集(建议 UTF-8)和输出格式(十六进制或 Base64)
  • 不要把密钥和消息拼在一起直接哈希来“代替”HMAC,那不是 HMAC

Python 示例

下面是 Python 中处理HMAC的常用写法:

import hmac,hashlib
hmac.new(b"key", b"abc", hashlib.sha256).hexdigest()
# 9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab

运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。

本站的HMAC计算工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。

常见问题

【和直接 hash(key+message) 有什么不同?】直接拼接有长度扩展等隐患;HMAC 按 RFC 2104 构造,是标准做法。

【密钥多长合适?】至少与哈希输出相当,例如 HMAC-SHA256 建议 32 字节随机密钥。

【“key”+“abc”的 HMAC-SHA256 是多少?】9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab。

文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。

署名:123问编辑部 · 最近修订:2026-11-11 · 已按编辑与审核说明检查;内容仅供参考,不构成医疗、法律或投资建议。发现错误可查看纠错方式。

标签: 数码开发

抱歉,评论功能暂时关闭!