HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码)是一种广泛使用的消息认证技术,由 RFC 2104 定义。HMAC 将密钥与消息一起通过哈希函数处理,生成一个固定长度的签名。相比普通哈希,HMAC 需要知道密钥才能生成或验证签名,因此同时保证了消息的完整性和来源真实性。
**HMAC 是现代 API 安全的基石**。Stripe、GitHub、Shopify、Slack、Twilio 等平台使用 HMAC-SHA256 签名 Webhook 事件,确保请求确实来自平台而非伪造。AWS 使用 HMAC-SHA256 实现 Signature V4 请求签名。JWT 的 HS256 算法本质就是 HMAC-SHA256。理解 HMAC 是掌握 API 安全的第一步。
**不同平台的签名格式各有不同**:Stripe 签名格式为 `t=timestamp,v1=hex_signature`,需要签名的内容是 `timestamp.payload`;GitHub 使用 `X-Hub-Signature-256` 头,格式为 `sha256=hex_signature`;Shopify 使用 `X-Shopify-Hmac-Sha256`,值为 Base64 编码。本工具支持这些常见格式的自动解析和验证。
**为什么签名验证会失败?** 最常见的原因是消息格式不匹配:平台可能签名的不是原始消息体,而是 `timestamp.payload` 这样的组合字符串;或者消息包含额外换行;或者签名包含前缀(如 `sha256=`)但你没有去掉。仔细对照平台文档,使用十六进制原始值进行比对。
工具使用浏览器原生 **Web Crypto API**(SubtleCrypto)实现 HMAC 计算,与 HTTPS 和 TLS 使用的加密库是同一套代码。所有计算在本地完成,密钥和消息不发送到任何服务器。打开浏览器开发者工具的网络面板,可以验证全程无任何外网请求。