【n8n教程】:Crypto节点,掌握数据加密与安全签名

n8n Crypto节点是一个强大的内置加密工具,无需编写复杂代码,你就能在工作流中轻松实现数据加密、数据散列、HMAC签名和数字签名等高级安全功能。这对于初学者来说是一个完美的切入点,既能掌握加密的核心概念,又能立即应用到实际的自动化场景中。
n8n Crypto节点在工作流中的位置和功能展示
n8n Crypto节点在工作流中的位置和功能展示

Crypto节点的四大核心功能

1️⃣ Generate(生成随机字符串)

作用与原理
生成加密安全的随机字符串,这些随机值无法被预测,适合用作验证码、API令牌、会话ID等需要唯一性和不可预测性的场景。
支持的编码类型

实用场景
生成临时验证码、创建API令牌、生成唯一的用户会话ID、创建安全的重置密码链接。
配置示例


    
    
    
  Property Name: verification_code
Type: HEX
# 生成结果:a3f9e2b1c7d4e8f6ac32e9d1f5b7c4e

2️⃣ Hash(数据散列)

作用与安全原理
Hash是一种单向加密算法,将任意长度的数据转换为固定长度的散列值。最重要的特性是不可逆性——无法从哈希值反推出原始数据,因此是存储密码和验证数据完整性的理想选择。
支持的哈希算法对比

算法位数安全性推荐用途状态
MD5128位不建议❌ 已破解
SHA256256位中高密码存储、文件验证✅ 推荐
SHA512512位高安全需求✅ 推荐
SHA3-256/384/512256-512位最高最新标准✅ 最佳

参数配置


    
    
    
  Type: SHA256              # 选择哈希算法
Binary File: OFF          # 哈希文本(OFF)还是二进制文件(ON)
Value: 要散列的数据        # 输入原始值
Property Name: file_hash  # 输出属性名称
Encoding: HEX            # HEX或BASE64编码

实用场景

Hash示例


    
    
    
  原始数据: "hello123"
SHA256: "f3fd5800ab1ac3d17c5f9f0b308f0c7c"
SHA512: "a6e76e5b13b0e81f45f9f0b308f0c7c..."(更长,更难破解)

3️⃣ HMAC(带密钥的散列)

作用与验证原理
HMAC(Hash-based Message Authentication Code)结合了Hash算法和密钥的力量,用于验证消息的来源真实性和完整性。与普通Hash的最大区别是需要一个秘密密钥,接收方必须持有相同的密钥才能验证消息。
参数配置


    
    
    
  Type: SHA256              # 选择哈希算法
Value: 要验证的数据        # 原始消息内容
Secret: 秘密密钥          # 只有发送方和接收方知道
Property Name: hmac_code  # 输出属性名称
Encoding: HEX            # HEX或BASE64编码

验证工作流示例


    
    
    
  发送方:
  数据 + 密钥 → HMAC → 签名: "e3b0c44298..."
  发送(数据, 签名)

接收方:
  收到(数据, 签名)
  使用相同密钥计算: HMAC → 本地签名: "e3b0c44298..."
  对比:
    ✓ 相同 = 数据未被篡改 + 来源真实
    ✗ 不同 = 数据被篡改或伪造请求

实用场景

真实案例:一位开发者需要调用某个API进行交易,该API要求所有请求必须使用HMAC-SHA512签名。直接使用Crypto节点配置HMAC,选择SHA512和HEX编码,几分钟内就完成了签名,无需编写任何代码。


4️⃣ Sign(数字签名)

作用与应用场景
使用私钥对数据进行加密签名,证明数据的来源和真实性。这是非对称加密的应用,需要一对密钥(私钥用于签名,公钥用于验证)。
参数配置


    
    
    
  Value: 要签名的数据        # 原始数据
Algorithm: RSA-SHA256     # 签名算法
Private Key: 你的私钥      # 保密的私钥
Property Name: signature  # 输出属性名称
Encoding: BASE64          # 编码方式

实用场景


实操案例教程

案例1:安全的邮件验证码系统

场景:用户请求重置密码时,生成一个6位数字验证码并通过邮件发送。

工作流步骤

  1. 1. Webhook触发器:接收用户请求
  2. 2. Crypto节点生成验证码:使用Generate操作生成随机码
  3. 3. Email节点:发送验证码到用户邮箱
  4. 4. 存储验证码:保存到数据库用于后续验证

n8n配置方法


    
    
    
  Crypto节点:
├─ Action: Generate
├─ Property Name: verification_code
├─ Type: HEX
└─ 输出示例: a3f9e2b1

邮件节点:
├─ 收件人: {{ $json.user_email }}
├─ 主题: 您的验证码
└─ 正文: 您的验证码为: {{ $json.verification_code }}

数据库保存:
INSERT INTO verification_codes 
  (user_id, code, created_at, expires_at) 
VALUES 
  ('{{ $json.user_id }}', '{{ $json.verification_code }}', NOW(), NOW() + INTERVAL 10 MINUTE)

案例2:Webhook安全性验证

场景:接收来自Stripe支付服务的Webhook通知,确保请求来自真实的Stripe而非攻击者伪造。
工作流步骤

  1. 1. Webhook触发器:接收支付通知
  2. 2. 提取签名:从HTTP头获取Stripe-Signature
  3. 3. Crypto HMAC:使用Stripe密钥重新计算签名
  4. 4. 条件判断:验证签名是否匹配
  5. 5. 后续处理:安全处理支付事件或拒绝伪造请求

n8n配置方法


    
    
    
  Crypto节点(HMAC验证):
├─ Action: HMAC
├─ Type: SHA256
├─ Value: {{ $json.body }}(请求体)
├─ Secret: {{ $env.STRIPE_WEBHOOK_SECRET }}
├─ Property Name: calculated_signature
└─ Encoding: HEX

条件节点(安全检查):
if $json.calculated_signature === $json.stripe_signature
  → ✓ 处理支付 → 更新订单数据库
else
  → ✗ 拒绝 → 记录警告日志

案例3:用户密码安全存储

场景:注册新用户时,使用Hash安全存储密码,登录时通过对比Hash值验证身份。
工作流步骤

  1. 1. 接收用户注册信息
  2. 2. Hash密码:转换为不可逆的哈希值
  3. 3. 保存到数据库:存储Hash而非原始密码
  4. 4. 登录验证:对比Hash值而非明文

n8n配置方法


    
    
    
  注册时 - Hash密码:
Crypto节点:
├─ Action: Hash
├─ Type: SHA256
├─ Value: {{ $json.password }}
├─ Property Name: password_hash
└─ Encoding: HEX

保存数据库:
INSERT INTO users (email, password_hash, created_at)
VALUES ('{{ $json.email }}', '{{ $json.password_hash }}', NOW())

登录时 - 验证密码:
1. 收到登录请求
2. Crypto Hash用户输入的密码
3. 查询数据库获取存储的Hash
4. 对比两个Hash值
   ✓ 相同 → 登录成功
   ✗ 不同 → 登录失败

完整工作流示例:API安全请求签名

这个工作流演示了如何调用需要HMAC签名的第三方API,例如Binance、某些支付API等。
工作流节点构成


    
    
    
  Manual Trigger (手动触发)
        ↓
    ┌───┴───┬───────────┬───────────┐
    ↓       ↓           ↓           ↓
Crypto    Crypto      Crypto      (其他处理)
HMAC签名   随机令牌     Hash邮箱
    ↓       ↓           ↓
    └───┬───┴───────────┘
        ↓
HTTP Request (调用API)
        ↓
结果展示或后续处理

核心节点配置


    
    
    
  节点1 - HMAC签名:
{

  "action"
: "hmac",
  "type"
: "sha256",
  "value"
: "amount=100&currency=USD&timestamp=1234567890",
  "secret"
: "{{ $env.API_SECRET }}",
  "dataPropertyName"
: "hmac_signature",
  "encoding"
: "hex"
}


节点2 - HTTP请求:
{

  "method"
: "GET",
  "url"
: "https://api.example.com/account",
  "headers"
: {
    "X-Signature"
: "{{ $json.hmac_signature }}",
    "X-Token"
: "{{ $json.random_token }}",
    "X-Email-Hash"
: "{{ $json.email_hash }}"
  }

}

执行示例


    
    
    
  输入:
  原始请求参数: "amount=100&currency=USD&timestamp=1234567890"
  API密钥: "my_secret_key_123"

Crypto处理:
  参数 + 密钥 → HMAC-SHA256 → 签名

最终请求头:
  X-Signature: 7e3d8b9f2a4c6e1d5f9b8c2e4d6f8a0b
  
API返回:
  {
    "status": "success",
    "balance": 1000,
    "currency": "USD"
  }
数据加密和哈希算法的工作原理
数据加密和哈希算法的工作原理

最佳实践指南

🔑 密钥管理

✅ 推荐做法

  1. 1. 使用环境变量存储密钥:{{ $env.API_SECRET }}
  2. 2. 在n8n Credentials系统中管理敏感凭证
  3. 3. 定期轮换API密钥
  4. 4. 为不同的集成使用不同的密钥
  5. 5. 限制密钥的权限范围

❌ 禁止做法

  1. 1. 在工作流中硬编码密钥
  2. 2. 将密钥提交到GitHub或共享代码
  3. 3. 在日志中打印密钥
  4. 4. 使用相同的密钥用于多个服务
  5. 5. 永不轮换密钥

🛡️ 算法选择指南

使用场景推荐算法原因
密码存储SHA256/SHA512单向、高安全性、速度适中
文件校验SHA256标准、被广泛使用、验证完整
API签名HMAC-SHA256需要密钥、防篡改、效率高
最高安全SHA3-512最新标准、最抗碰撞
⚠️ 避免MD5已被破解、容易碰撞

🔍 调试与验证

测试方法

  1. 1. 使用在线工具(CyberChef)验证计算结果
  2. 2. 添加Debug节点查看中间输出值
  3. 3. 对比第三方文档中的示例签名
  4. 4. 使用Postman测试API调用
  5. 5. 查看n8n的执行日志追踪问题

常见问题解答

Q:Hash和HMAC的根本区别是什么?

:主要差异在于:

特性HashHMAC
需要密钥❌ 否✅ 是
可逆性❌ 不可逆❌ 不可逆
应用场景密码存储、文件验证身份验证、防篡改验证
安全强度中等(仅基于算法)高(算法+密钥)
验证方式相同输入 → 相同输出相同输入+密钥 → 相同输出

Q:为什么不使用MD5?

:MD5已于2004年被严重破解,存在碰撞漏洞。两个不同的输入可能产生相同的MD5值,违反了哈希函数的基本原则。永远不要用MD5存储密码或验证敏感数据

Q:如何存储生成的随机密钥?

  1. 1. 存储在环境变量中(最佳)
  2. 2. 存储在n8n的Credentials系统(推荐)
  3. 3. 存储在专门的密钥管理服务(AWS Secrets Manager、HashiCorp Vault等)
  4. 4. 绝对不要存储在代码、日志或配置文件中

Q:Crypto节点能做对称加密(AES)吗?

:当前版本不直接支持AES加密/解密。Crypto节点主要提供单向函数(Hash、HMAC)和签名。如需AES加密,可以:

  1. 1. 使用Code节点调用Node.js crypto模块
  2. 2. 通过HTTP Request调用第三方加密服务
  3. 3. 等待n8n未来版本的功能扩展

总结

n8n Crypto节点的核心优势


官方文档[1]
n8n系列教程[2]

引用链接

[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.crypto/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#