加密工具·7 分钟

如何生成 HMAC 签名:SHA-256、SHA-1、SHA-512

学习如何为 API 请求、Webhook 和 JWT 生成与验证 HMAC 签名。免费浏览器内工具。

什么是 HMAC 签名?

HMAC(基于哈希的消息认证码)是一种验证消息完整性和真实性的方法。它结合了加密哈希函数(通常是 SHA-256)和一个共享密钥,为给定的输入生成唯一的签名。哪怕消息中只有一个字节改变,签名也会变化。

HMAC 广泛应用于 API 认证、Webhook 验证、JWT 签名和安全通信协议。HMAC 与普通哈希不同,它需要密钥,这意味着只有持有密钥的参与方才能生成或验证签名。

常见使用场景

  • Webhook 验证:确认收到的请求来自已知发送方
  • API 请求签名:让服务器验证请求由已知客户端发出
  • JWT 签名:生成 JSON Web Token 的签名段
  • 文件完整性:检测传输或存储过程中的篡改
  • OAuth 1.0a 与 AWS Signature V4:经典与现代的请求签名方案

方法 1:使用 UtilBoxx 免费 HMAC 生成器(推荐)

我们的 HMAC 签名生成器 支持 HMAC-SHA-256、HMAC-SHA-1、HMAC-SHA-512,并输出 hex 或 Base64。步骤如下:

  1. 访问 utilboxx.com/zh/tools/crypto/hmac
  2. 输入消息和密钥
  3. 选择算法(默认 SHA-256)
  4. 选择输出编码(hex 或 Base64)
  5. 一键复制生成的签名

这个方法的优势

  • 完全在浏览器中运行——密钥不离开你的设备
  • 支持最常用的 HMAC 算法
  • 输入时实时更新
  • 移动端友好
  • 100% 免费、无需注册、无广告

方法 2:使用命令行 OpenSSL

`openssl` 命令在 Linux、macOS 和 Windows(带 Git Bash 或 WSL)都可用:

```bash echo -n "message" | openssl dgst -sha256 -hmac "mysecretkey" ```

这会输出一个 hex 编码的 HMAC-SHA-256 签名。把 `sha256` 换成 `sha1` 或 `sha512` 可使用其它算法。

方法 3:使用语言库

在 Node.js 中,内置的 `crypto` 模块处理 HMAC:

```javascript const crypto = require('crypto'); const hmac = crypto.createHmac('sha256', 'mysecretkey'); hmac.update('message'); console.log(hmac.digest('hex')); ```

在 Python 中:

```python import hmac, hashlib print(hmac.new(b"mysecretkey", b"message", hashlib.sha256).hexdigest()) ```

在 Go 中:

```go package main import ("crypto/hmac"; "crypto/sha256"; "encoding/hex"; "fmt") func main() { mac := hmac.New(sha256.New, []byte("mysecretkey")) mac.Write([]byte("message")) fmt.Println(hex.EncodeToString(mac.Sum(nil))) } ```

常见问题

HMAC 和数字签名一样吗?

不一样。HMAC 使用共享密钥,而数字签名使用非对称加密(公钥/私钥)。HMAC 更快、更简单,但你必须安全地把密钥共享给所有需要验证签名的参与方。

应该用哪种哈希函数?

HMAC-SHA-256 是现代默认。它被广泛支持、安全、快速。HMAC-SHA-1 属于遗留方案,仅用于老系统兼容。HMAC-SHA-512 为非常敏感的应用提供更高安全性。

HMAC 签名能反推吗?

不能。签名是单向函数。攻击者无法从签名中恢复消息或密钥,但如果他们怀疑消息内容,可以验证猜测。使用长且随机的密钥可最大化安全性。

密钥泄露会怎样?

密钥泄露后,攻击者可以为任何消息伪造有效签名,认证机制彻底失效。像对待密码一样对待 HMAC 密钥:安全存储、定期轮换、绝不入库到源码。

结论

HMAC 是安全 API 和消息完整性的基础工具。想要一个快速、浏览器内的生成器,UtilBoxx HMAC 签名工具 是计算和验证签名最简单的方式。