跳到主内容
UniKit

HMAC 生成器

用密钥对消息计算 HMAC 签名,支持 HMAC-MD5/SHA-1/SHA-256/SHA-512,密钥可按 UTF-8 文本或十六进制解释,结果输出 hex 与 Base64。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

密钥解释方式
摘要长度: 32 字节
HMAC 结果
Hex
Base64

与 node 的 crypto.createHmac 结果一致,可用于校验服务端签名

这个工具能做什么

  • 核对服务端签名:把消息和密钥填进去,得到的 HMAC 值与后端日志里的签名逐位对比,快速定位是密钥错了还是消息被改过。
  • 对接支付、Webhook 或开放平台接口时试算签名:支持 HMAC-MD5/SHA-1/SHA-256/SHA-512,输出同时给 hex 与 Base64。
  • 密钥是二进制时不用先转文本:把「密钥解释方式」切成十六进制,直接粘贴 32 位 hex 密钥即可。
  • 作为 RFC 2104 的参考实现:结果与 node 的 crypto.createHmac 一致,可以用来验证自己写的实现。

示例

输入

消息 what do ya want for nothing?,密钥 Jefe(UTF-8),算法 HMAC-SHA-256

输出

Hex:5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
Base64:W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM=

这是 RFC 4231 的经典测试向量;换 SHA-1 会得到 b34ceac4516ff23a143e61d79d0fa7a4fbe5f266,换 MD5 得到 04130747afca4d79e32e87cf2104f087。

常见问题

HMAC 和直接算 SHA-256 有什么区别?

直接哈希谁都能算,无法证明消息来自持有密钥的一方;HMAC 把密钥混进哈希过程(内层和外层两次哈希),只有知道密钥的人才能算出相同结果,所以能同时验证完整性和来源。

该选哪个算法?

新系统用 HMAC-SHA-256,强度足够且各语言都有实现;SHA-512 更保守但结果更长。HMAC-MD5 和 HMAC-SHA-1 目前没有实际可用的伪造攻击,但既然对接方支持,优先选 SHA-256 及以上。

密钥为什么可以按十六进制解释?

很多平台的密钥本身就是二进制,用 hex 字符串传输(例如 32 位十六进制代表 16 字节密钥)。如果按 UTF-8 解释这 32 个字符,密钥长度和内容都会变,签名自然对不上,所以工具提供两种解释方式。

签名对不上最常见的三个原因?

一是密钥解释方式选错(UTF-8 与 hex 混用);二是参与签名的消息多了或少了一个换行、空格;三是输出编码不同(hex 大小写、Base64 是否去掉填充)。先统一这三项再排查算法。

密钥和消息会被上传吗?

不会。四种算法都是纯 JavaScript 的同步实现,全部在浏览器本地计算,页面不发送任何请求,密钥不会离开你的设备。

关键词:hmacsha256sha1md5签名signature密钥secretapi 签名rfc 2104

同类工具