رمزنگاری
Crypto
رمزنگاری و Hashing: MD5, SHA-256, HMAC, AES و UUID
نمای کلی
نود Crypto چیست؟
نود Crypto عملیات رمزنگاری را در Workflow فراهم میکند:
- 1Hash: محاسبه Hash (MD5, SHA-1, SHA-256, SHA-512)
- 2HMAC: ساخت Hash-based Message Authentication Code
- 3Encrypt/Decrypt: رمزنگاری و رمزگشایی با AES
- 4Sign/Verify: امضای دیجیتال و تأیید
- 5UUID/Random: تولید شناسههای یکتا
چرا Crypto لازم است؟
- Webhook Verification: بررسی اصالت Webhookهای دریافتی (GitHub, Stripe, Shopify)
- API Authentication: ساخت امضای HMAC برای APIهای امن
- Data Protection: رمزنگاری دادههای حساس قبل از ذخیره
- Password Hashing: Hash کردن رمزهای عبور
- Checksum: بررسی صحت فایلها و دادهها
- Token Generation: تولید توکنهای امن
الگوریتمهای پشتیبانیشده:
- Hash: MD5, SHA-1, SHA-256, SHA-384, SHA-512
- HMAC: همه Hash algorithms + Secret Key
- Encryption: AES-128, AES-256 (CBC, CTR, GCM)
- Encoding: Base64, Hex, UTF-8
احراز هویت
بدون نیاز به احراز هویت - نود Crypto یک نود داخلی n8n است. کلیدهای رمزنگاری به صورت پارامتر در نود وارد میشوند.
عملیاتهای موجود
Hash
محاسبه Hash از متن یا داده. خروجی غیرقابل بازگشت است (one-way).
HMAC
ساخت HMAC (Hash-based Message Authentication Code). برای تأیید اصالت پیام با کلید مشترک.
Encrypt (رمزنگاری)
رمزنگاری داده با AES. خروجی قابل رمزگشایی با کلید صحیح.
Decrypt (رمزگشایی)
رمزگشایی داده رمزنگاریشده با AES. نیاز به همان کلید و الگوریتم رمزنگاری.
Generate UUID
تولید UUID (Universally Unique Identifier) نسخه 4. شناسه یکتای 128 بیتی.
Generate Random
تولید رشته تصادفی امن. مناسب برای توکن، OTP و کلید.
Base64 Encode/Decode
تبدیل داده به Base64 و بالعکس. مناسب برای انتقال Binary data.
کاربردهای متداول
موارد استفاده رایج
۱. تأیید Webhook (Stripe/GitHub/Shopify)
دریافت Webhook > HMAC-SHA256 با Secret > مقایسه با Header signature > رد یا قبول.
۲. امضای API Request
ساخت امضای HMAC از پارامترها > اضافه به Header > ارسال API Request.
۳. رمزنگاری داده حساس
دریافت شماره کارت/کد ملی > AES Encrypt > ذخیره در دیتابیس > Decrypt هنگام نیاز.
۴. تولید OTP
Generate Random (6 رقمی) > ذخیره با TTL > ارسال SMS > تأیید.
۵. Hash رمز عبور
دریافت رمز عبور > SHA-256 Hash > ذخیره Hash در دیتابیس.
۶. Checksum فایل
دریافت فایل > MD5/SHA-256 Hash > مقایسه با Checksum اصلی > تأیید صحت.
۷. تولید API Key
Generate UUID + Random String > Hash > ذخیره و ارسال به کاربر.
۸. امضای JWT (دستی)
ساخت Header + Payload JSON > Base64 Encode > HMAC-SHA256 > ترکیب JWT.
۹. رمزنگاری ایمیل
محتوای حساس > AES Encrypt > ارسال ایمیل > گیرنده با کلید Decrypt میکند.
۱۰. تولید لینک امن
پارامترها + timestamp > HMAC > اضافه به URL > تأیید در سمت سرور.
۱۱. Data Integrity
ارسال داده بین سیستمها > Hash محاسبه > گیرنده Hash مقایسه میکند.
نکات حرفهای
نکات و ترفندها
انتخاب الگوریتم Hash
- MD5: سریع، برای Checksum (نه امنیت)
- SHA-1: منسوخ برای امنیت
- SHA-256: استاندارد فعلی، توصیهشده
- SHA-512: امنتر، کندتر
تأیید Webhook Stripe
- 1Raw body دریافت کنید (نه parsed JSON)
- 2HMAC-SHA256 با Stripe Webhook Secret
- 3مقایسه با stripe-signature header
- 4timestamp بررسی کنید (جلوگیری از Replay Attack)
تأیید Webhook GitHub
- 1Raw body + Secret Key
- 2HMAC-SHA256 محاسبه
- 3مقایسه با X-Hub-Signature-256 header
- 4sha256= prefix را حذف کنید
رمزنگاری امن
- از AES-256-GCM استفاده کنید (Authentication + Encryption)
- IV هر بار متفاوت باشد (Random)
- کلید را در Environment Variable ذخیره کنید
- هرگز کلید را در Workflow ذخیره نکنید
تولید Token امن
- 1Crypto Random (32 بایت hex)
- 2یا UUID v4 + timestamp
- 3یا HMAC(userId + timestamp, serverSecret)
Base64 Tips
- Base64 رمزنگاری نیست! فقط Encoding است
- برای انتقال Binary data در JSON استفاده کنید
- هر 3 بایت = 4 کاراکتر Base64
- URL-safe Base64: + → - و / → _
ادغام با سایر نودها
- HTTP Request: دریافت Webhook + تأیید HMAC
- IF: شرط بر اساس نتیجه تأیید
- Set: اضافه کردن Hash/Token به داده
- Code: عملیات رمزنگاری پیچیده
- Function: محاسبات سفارشی
امنیت کلیدها
- کلیدها را در Credentials n8n ذخیره کنید
- از Environment Variables استفاده کنید
- هرگز کلید را در لاگ چاپ نکنید
- کلیدها را مرتباً Rotate کنید
- از Key Derivation Function (KDF) استفاده کنید
رفع مشکلات
عیبیابی
۱. Hash متفاوت از انتظار
مشکل: Hash محاسبهشده با Hash مورد انتظار فرق دارد راهحل: Encoding ورودی بررسی شود (UTF-8 vs ASCII). فاصلههای اضافی حذف شوند. حروف بزرگ/کوچک Hex بررسی شود.
۲. HMAC تأیید نمیشود
مشکل: امضای HMAC با سرویسدهنده مطابقت ندارد راهحل: Secret key دقیقاً یکسان باشد. الگوریتم یکسان باشد. Encoding خروجی (hex vs base64) بررسی شود. داده ورودی دقیقاً همان Raw body باشد.
۳. Decrypt خطا میدهد
مشکل: رمزگشایی با خطا مواجه میشود راهحل: کلید و IV دقیقاً همان مقادیر Encrypt باشند. الگوریتم یکسان باشد. داده Corrupt نشده باشد.
۴. طول کلید AES اشتباه
مشکل: "Invalid key length" خطا راهحل: AES-128: کلید 16 بایت. AES-256: کلید 32 بایت. از Hash برای تبدیل رمز به کلید ثابت استفاده کنید.
۵. Base64 خروجی خراب
مشکل: Decode Base64 متن ناخوانا راهحل: بررسی کنید ورودی واقعاً Base64 باشد. Padding (=) حذف نشده باشد. URL-safe Base64 و Standard تفاوت دارند.
۶. UUID تکراری
مشکل: UUIDهای تولیدشده تکرار میشوند راهحل: UUID v4 تقریباً غیرممکن تکرار میشود. اگر تکرار دارید، مشکل Random number generator است.
۷. Performance با داده بزرگ
مشکل: رمزنگاری فایلهای بزرگ کند است راهحل: از Streaming encryption استفاده کنید (Code node). فایلها را chunk chunk پردازش کنید.
