HMAC 计算

基于密钥计算 HMAC-SHA 消息认证码。

什么是HMAC 计算?

HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)是一种结合密钥和哈希算法(如SHA-1、SHA-256、SHA-384、SHA-512)计算出的认证码,本工具让你输入一段消息和一个密钥,计算出对应的HMAC值。 和普通哈希(如直接对文本做SHA-256)不同,HMAC引入了密钥参与运算,只有知道相同密钥的一方才能算出相同的结果,因此它不仅能像普通哈希一样验证内容是否被篡改,还能验证消息确实来自持有密钥的一方,常被用作消息认证而非加密——HMAC本身不能被解密还原出原始消息,也不是对称加密算法。

为什么使用HMAC 计算?

典型场景:验证第三方支付、开放平台Webhook回调请求的签名,比如支付宝、微信支付、GitHub Webhook都会用HMAC-SHA256对请求体加密钥签名,服务端收到请求后用同样密钥重新计算HMAC并比对,确认请求未被篡改且确实来自对方;接口请求签名,防止请求参数被中间人篡改;生成有密钥保护的完整性校验码,比原始哈希更安全,因为攻击者即使知道消息内容也无法伪造正确的HMAC(缺少密钥)。

使用示例

验证Webhook签名

消息:{"order_id":"1001","amount":99},密钥:mysecretkey,算法:HMAC-SHA256 计算结果:一串64位十六进制字符串,与回调请求头里的签名字段逐字符比对,一致则说明请求合法。

不同算法对比

同样的消息和密钥,分别用HMAC-SHA1、HMAC-SHA256、HMAC-SHA512计算,会得到长度不同(分别为40/64/128位十六进制字符)且完全不同的结果,需要与对方约定好具体使用哪种算法。

使用提示

计算全部在浏览器本地完成,密钥不会上传到服务器,但仍建议不要在公共电脑上输入生产环境的真实密钥。

常见问题

HMAC 和普通哈希有什么区别?
HMAC 在哈希基础上引入了密钥,只有持有相同密钥的一方才能计算出相同结果,常用于 API 签名、消息认证等场景,安全性比单纯哈希更高。
密钥可以是任意字符串吗?
可以。密钥会先按 UTF-8 转成字节参与运算,长度没有严格限制,但建议使用足够长且随机的密钥以保证安全性。
数据会上传服务器吗?
不会。HMAC 使用浏览器内置的 Web Crypto API(crypto.subtle)在本地计算完成。
HMAC和普通SHA256哈希有什么区别?
普通SHA256只对内容做哈希,任何人都能重新计算验证;HMAC额外引入密钥参与运算,只有知道密钥的人才能算出正确结果,防篡改能力更强,常用于身份认证场景。
HMAC能加密消息吗?
不能,HMAC是单向的认证码计算,无法从结果反推或解密出原始消息,如果需要加解密应使用AES等对称加密算法。
密钥长度有要求吗?
理论上任意长度密钥都能使用,但过短的密钥容易被暴力破解,建议使用不少于16字节的随机密钥,具体要求以对接的第三方文档为准。
计算结果为什么和对方不一致?
常见原因是密钥不一致、消息内容包含了不可见的空格或换行符差异、字符编码不同(如UTF-8与GBK)、或者使用的HMAC算法(SHA1/SHA256/SHA512)不一致,需要逐项核对。

相关工具

相关教程

← 返回工具箱· 数据均在浏览器本地处理,不上传服务器。