HMAC生成器
生成安全的HMAC认证码,支持多种哈希算法
用于HMAC生成的密钥。请保密!
* SHA-1已被认为不够安全。** MD5已被密码学破解,仅应用于旧系统兼容。新应用请使用SHA-256或SHA-512。
结果
关于HMAC
HMAC (Keyed-Hash Message Authentication Code,密钥哈希消息认证码) 是一种利用加密哈希函数和加密密钥来进行消息认证的特定机制。正如 RFC 2104 所定义,它既可以用于验证数据的完整性,也可以验证消息的真实性(Authentication)。
与仅确保数据完整性(检测意外更改)的标准哈希函数(如 SHA-256)不同,HMAC 使用密钥来确保真实性(检测攻击者的篡改)。它广泛应用于 API 认证(如 AWS 签名 V4)、JSON Web Token (JWT) 和金融数据传输。HMAC 的强度取决于底层哈希函数的加密强度、哈希输出的位长以及密钥的质量。
支持的HMAC算法
本工具支持全面的 HMAC 算法,包括 SHA-256, SHA-512, SHA-384, SHA-224 以及现代的 SHA-3 变体。同时支持传统的 MD5 和 SHA-1。核心计算遵循公式:HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m)),其中 H 是哈希函数,K 是密钥,m 是消息,opad 是外部填充 (0x5c),ipad 是内部填充 (0x36)。
常见用途
安全注意事项
安全性在很大程度上取决于密钥。密钥强度:密钥应该是随机的,并且长度至少等于哈希函数的输出长度(例如 SHA-256 为 32 字节)。算法选择:现代应用应使用 SHA-256 或 SHA-512。避免使用 MD5 和 SHA-1,因为它们容易受到碰撞攻击,尽管 HMAC 结构本身比底层哈希函数更能抵抗这些碰撞。
示例
消息: "Hello, World!"
密钥: "secret-key-2025"
算法: HMAC-SHA256
输出:
e4d7f1b4c4e5a8d3e...
常见问题 (FAQ)
普通 Hash 和 HMAC 有什么区别?
Hash(如 SHA-256)是单向函数,任何人都可以计算消息的哈希值。HMAC 使用哈希函数*加上*一个秘密密钥。只有持有该密钥的人才能生成或验证正确的 HMAC,因此它适合用于身份验证。
为什么不直接使用 Hash(Key + Message)?
简单的拼接密钥和消息(`H(Key + Message)`)在使用 MD5 或 SHA-1 等函数时容易受到“长度扩展攻击”(Length Extension Attack)。HMAC 的嵌套结构(`H(Key ^ opad + H(Key ^ ipad + Message))`)是专门设计来防止这种攻击和其他密码学弱点的。
HMAC 是可逆的吗(能解密吗)?
不能。HMAC 是一种加密哈希函数,不是加密算法。它是单向的。你无法从输出反推出原始消息或密钥。它用于验证真实性,而不是用于隐藏数据。
我的密钥应该多长?
RFC 2104 建议密钥长度至少等于哈希输出长度(例如 SHA-256 为 32 字节/64 个十六进制字符)。超过块大小的密钥不会显著增加安全性,因为它们会被哈希处理。
可以用它来存储密码吗?
虽然 HMAC 比简单哈希好,但对于密码存储,应该使用专门的密钥派生函数 (KDF),如 PBKDF2、bcrypt 或 Argon2。PBKDF2 实际上在内部使用了 HMAC,但增加了迭代次数以减缓暴力破解。
使用此工具我的密钥安全吗?
是的。此工具完全在客户端运行。HMAC 计算直接在您的浏览器中使用 JavaScript(Web Crypto API 或 CryptoJS)执行。您的密钥和消息永远不会发送到任何服务器。