HMAC 生成

示例
—算法
—输出位数
—密钥字节
—耗时

HMAC 生成器

这是 HMAC 生成器:用密钥和哈希混出标签,同时证明完整性和真实性。 HMAC(RFC 2104)把密钥和哈希混在一起,标签同时证明完整性和真实性。标识符 HMAC、HMAC-SHA256、SHA-1、SHA-384、SHA-512、MD5、SHA-3、JWT、HS256、UTF-8、Hex、Base64、Web Crypto 不翻译。显示示例使用消息 The quick brown fox jumps over the lazy dog、密钥 key。HMAC-SHA256 hex 是 f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8;Base64 是 97yD9DBThCSxMpjmqm+xQ+9NWaFJRhdZl0edvC0aPNg=。同一对的 HMAC-SHA1 是 de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9。芯片 message / secret-key 的 HMAC-SHA256 是 287a3bd8a4fc7731a94c722079055323644d8798bd291bf9878abc9b8fd4b1d0。

如何使用

  1. 粘贴消息或拖入文件(最大 10 MB),再填密钥。空密钥会被拒绝。
  2. 密钥编码:UTF-8 文本、Hex 或 Base64。消息的字符编码与 Base64 工具相同(UTF-8、GBK、Big5、Shift_JIS 等)。
  3. 算法可选 MD5、SHA-1、SHA-224、SHA-256(默认)、SHA-384、SHA-512 或 SHA-3。Hex 可大小写。复制结果跟输出格式;两栏始终给出 Hex 和 Base64。
  4. 核对接受 hex 或 Base64。卡片显示算法、输出位数(HMAC-SHA256 为 256)、密钥字节和耗时。
  5. 数据不上传。SHA-384 / SHA-512 走 Web Crypto,需要 https 或 localhost。

算法与长度

HMAC-SHA256(256 位)是 API、webhook、JWT HS256 的常见选择。HMAC-SHA1(160 位)仍出现在 TOTP 和旧 OAuth;新项目请用 SHA-256。HMAC-SHA384 / HMAC-SHA512 为 384 和 512 位。HMAC-MD5 已过时。这里也提供 SHA-3。普通哈希不是 HMAC:谁都能算 SHA-256,只有持有密钥的人能算 HMAC-SHA256。

代码(与显示示例相同)

Node.js:crypto.createHmac('sha256', 'key').update('The quick brown fox jumps over the lazy dog').digest('hex') → f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8。

Python:hmac.new(b'key', b'The quick brown fox jumps over the lazy dog', hashlib.sha256).hexdigest()。

PHP:hash_hmac('sha256', 'The quick brown fox jumps over the lazy dog', 'key')。芯片 message / secret-key 对应 hash_hmac('sha256', 'message', 'secret-key') → 287a3bd8a4fc7731a94c722079055323644d8798bd291bf9878abc9b8fd4b1d0。

输出含义

HMAC 不加密,也不隐藏消息。Hex 每字节 2 个字符(SHA-256 共 64 位 hex)。Base64 是同一组字节。生产环境请用恒定时间比较;本页为方便使用普通相等比较。

常见问题

  • 哈希和 HMAC 有何不同? 哈希只检查完整性。HMAC 还能认证持有密钥的发送方。
  • JWT? HS256 / HS384 / HS512 是对 JWT header 和 payload 做 HMAC。见 JWT 解码。
  • HMAC-SHA1 还安全吗? 仍有人用,但新 API 请默认 HMAC-SHA256。
  • 和哈希工具一样吗? 哈希工具允许空密钥(此时是普通哈希)。本页必须有密钥,同时显示 Hex 与 Base64,并支持文件。

相关工具

普通摘要:MD5 与 SHA 哈希。令牌:JWT 解码。校验和:CRC32。

需要不带密钥的摘要? 打开哈希生成器 →