
作用与原理:
生成加密安全的随机字符串,这些随机值无法被预测,适合用作验证码、API令牌、会话ID等需要唯一性和不可预测性的场景。
支持的编码类型:
实用场景:
生成临时验证码、创建API令牌、生成唯一的用户会话ID、创建安全的重置密码链接。
配置示例:
Property Name: verification_code
Type: HEX
# 生成结果:a3f9e2b1c7d4e8f6ac32e9d1f5b7c4e作用与安全原理:
Hash是一种单向加密算法,将任意长度的数据转换为固定长度的散列值。最重要的特性是不可逆性——无法从哈希值反推出原始数据,因此是存储密码和验证数据完整性的理想选择。
支持的哈希算法对比:
| 算法 | 位数 | 安全性 | 推荐用途 | 状态 |
|---|---|---|---|---|
| MD5 | 128位 | 低 | 不建议 | ❌ 已破解 |
| SHA256 | 256位 | 中高 | 密码存储、文件验证 | ✅ 推荐 |
| SHA512 | 512位 | 高 | 高安全需求 | ✅ 推荐 |
| SHA3-256/384/512 | 256-512位 | 最高 | 最新标准 | ✅ 最佳 |
参数配置:
Type: SHA256 # 选择哈希算法
Binary File: OFF # 哈希文本(OFF)还是二进制文件(ON)
Value: 要散列的数据 # 输入原始值
Property Name: file_hash # 输出属性名称
Encoding: HEX # HEX或BASE64编码实用场景:
Hash示例:
原始数据: "hello123"
SHA256: "f3fd5800ab1ac3d17c5f9f0b308f0c7c"
SHA512: "a6e76e5b13b0e81f45f9f0b308f0c7c..."(更长,更难破解)作用与验证原理:
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编码,几分钟内就完成了签名,无需编写任何代码。
作用与应用场景:
使用私钥对数据进行加密签名,证明数据的来源和真实性。这是非对称加密的应用,需要一对密钥(私钥用于签名,公钥用于验证)。
参数配置:
Value: 要签名的数据 # 原始数据
Algorithm: RSA-SHA256 # 签名算法
Private Key: 你的私钥 # 保密的私钥
Property Name: signature # 输出属性名称
Encoding: BASE64 # 编码方式实用场景:
场景:用户请求重置密码时,生成一个6位数字验证码并通过邮件发送。
工作流步骤:
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)场景:接收来自Stripe支付服务的Webhook通知,确保请求来自真实的Stripe而非攻击者伪造。
工作流步骤:
Stripe-Signaturen8n配置方法:
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
→ ✗ 拒绝 → 记录警告日志场景:注册新用户时,使用Hash安全存储密码,登录时通过对比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值
✓ 相同 → 登录成功
✗ 不同 → 登录失败这个工作流演示了如何调用需要HMAC签名的第三方API,例如Binance、某些支付API等。
工作流节点构成:
Manual Trigger (手动触发)
↓
┌───┴───┬───────────┬───────────┐
↓ ↓ ↓ ↓
Crypto Crypto Crypto (其他处理)
HMAC签名 随机令牌 Hash邮箱
↓ ↓ ↓
└───┬───┴───────────┘
↓
HTTP Request (调用API)
↓
结果展示或后续处理核心节点配置:
节点1 - HMAC签名:
{
"action": "hmac",
"type": "sha256",
"value": "amount=100¤cy=USD×tamp=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¤cy=USD×tamp=1234567890"
API密钥: "my_secret_key_123"
Crypto处理:
参数 + 密钥 → HMAC-SHA256 → 签名
最终请求头:
X-Signature: 7e3d8b9f2a4c6e1d5f9b8c2e4d6f8a0b
API返回:
{
"status": "success",
"balance": 1000,
"currency": "USD"
}
✅ 推荐做法:
{{ $env.API_SECRET }}❌ 禁止做法:
| 使用场景 | 推荐算法 | 原因 |
|---|---|---|
| 密码存储 | SHA256/SHA512 | 单向、高安全性、速度适中 |
| 文件校验 | SHA256 | 标准、被广泛使用、验证完整 |
| API签名 | HMAC-SHA256 | 需要密钥、防篡改、效率高 |
| 最高安全 | SHA3-512 | 最新标准、最抗碰撞 |
| ⚠️ 避免 | MD5 | 已被破解、容易碰撞 |
测试方法:
答:主要差异在于:
| 特性 | Hash | HMAC |
|---|---|---|
| 需要密钥 | ❌ 否 | ✅ 是 |
| 可逆性 | ❌ 不可逆 | ❌ 不可逆 |
| 应用场景 | 密码存储、文件验证 | 身份验证、防篡改验证 |
| 安全强度 | 中等(仅基于算法) | 高(算法+密钥) |
| 验证方式 | 相同输入 → 相同输出 | 相同输入+密钥 → 相同输出 |
答:MD5已于2004年被严重破解,存在碰撞漏洞。两个不同的输入可能产生相同的MD5值,违反了哈希函数的基本原则。永远不要用MD5存储密码或验证敏感数据。
答:
答:当前版本不直接支持AES加密/解密。Crypto节点主要提供单向函数(Hash、HMAC)和签名。如需AES加密,可以:
✨ n8n Crypto节点的核心优势:
[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#