Skip to content

مولّد مفتاح JWT السري — HS256/384/512

ولّد مفتاحاً سرياً قوياً ومطابقاً للمواصفة لـ HS256/384/512 — 100% في متصفحك، لا يُرسل إلى خادم أبداً. base64url أو base64 أو hex؛ انسخه لملف .env.

بدون تتبّع يعمل في المتصفّح مجاني
يُولَّد مفتاحك السري محلياً بـ crypto.getRandomValues ولا يُرفع أو يُسجَّل أو يُخزَّن أبداً. يبقى على هذا الجهاز.
16 64

أوامر سطر الأوامر المكافئة

روجِع للتأكد من صحة طول المفتاح وفق RFC 7518 §3.2، ودقّة ترميز RFC 4648 عبر base64url / base64 / hex، ومصدر العشوائية الآمن تعمويّاً (crypto.getRandomValues، لا Math.random أبداً)، وخصوصية المفتاح السري المولَّد بلا شبكة ولا تخزين، وإتاحة الوصول (عناصر تحكّم موسومة، تقنيع إظهار/إخفاء، إعلانات لقارئ الشاشة عند التوليد والنسخ). — فريق أدوات أمان Go Tools · Jun 16, 2026

ما هو مولّد مفتاح JWT السري؟

ينتج مولّد مفتاح JWT السري مفتاح التوقيع العشوائي الذي يستخدمه رمز JSON Web Token الموقّع بـHMAC ليثبت أنه لم يُعبَث به. حين توقّع رمزاً بـHS256 أو HS384 أو HS512، تشغّل الخوارزمية HMAC على ترويسة الرمز وحمولته باستخدام مفتاح سري مشترك واحد؛ ويعيد المُتحقّق حساب HMAC نفسه بالمفتاح نفسه ويقبل الرمز فقط إذا تطابق التوقيعان. يرتكز أمان هذا المخطط كله على كون المفتاح السري طويلاً ولا يُتنبَّأ به — وهو بالضبط ما تنشئه هذه الأداة: سلسلة عشوائية عالية الإنتروبيا، مولَّدة في متصفحك، بحجم صحيح للخوارزمية التي تختارها.

من المفيد الدقّة بشأن ما تفعله الأداة وما لا تفعله. إنها تولّد المفتاح السري — القيمة التي تضعها في متغيّر بيئة JWT_SECRET — لا رمزاً جاهزاً. إن أردت تجميع ترويسة وحمولة وتوقيعهما في JWT فعلي، فتلك مهمة منشئ JWT؛ ولتفكيك رمز موجود والتحقق من توقيعه، استخدم محلّل JWT. فكّر في المفتاح السري كالمفتاح وفي المنشئ كالقفل الذي يشغّله: تولّد المفتاح مرة، وتخزّنه بأمان، وتعيد استخدامه لتوقيع رموز كثيرة والتحقق منها.

كم يجب أن يكون طول المفتاح؟ الجواب تحدّده المواصفة، لا التفضيل. تشترط RFC 7518 §3.2 — معيار JSON Web Algorithms — أن يكون مفتاح HMAC بحجم ناتج التجزئة على الأقل: «يجب استخدام مفتاح بحجم ناتج التجزئة (مثلاً 256 بت لـHS256) أو أكبر». يعطي ذلك جدولاً نظيفاً يتبعه المولّد تلقائياً:

| Algorithm | HMAC | Min bytes | Min bits | hex chars | base64 chars | base64url chars | |-----------|------|-----------|----------|-----------|--------------|-----------------| | HS256 | HMAC-SHA-256 | 32 | 256 | 64 | 44 | 43 | | HS384 | HMAC-SHA-384 | 48 | 384 | 96 | 64 | 64 | | HS512 | HMAC-SHA-512 | 64 | 512 | 128 | 88 | 86 |

تأتي أعداد الأحرف من ترميزات RFC 4648 لأطوال البايتات تلك: يضاعف hex عدد البايتات؛ ويتوسّع base64 بنسبة 4⁄3 مع الحشو؛ ويسقط base64url الحشو، فيصير مفتاح من 32 بايتاً 43 حرف base64url بدل 44. base64url هو ترميز JWT الأصلي — أبجدية آمنة في الروابط، بلا حشو — ولهذا هو الإخراج الافتراضي هنا؛ يمكن لمفتاح سري بـbase64url أن يجلس في ترويسة أو رابط أو قيمة إعداد دون أي هروب.

العشوائية هي الجزء الذي لا يمكنك التهاون فيه. يسحب هذا المولّد بايتاته من crypto.getRandomValues، مولّد الأرقام العشوائية الزائف الآمن تعمويّاً في المتصفح، البدائية نفسها التي تدعم توليد مفاتيح Web Crypto. لا يستخدم Math.random أبداً، فهو سريع لكنه متنبَّأ به وغير صالح إطلاقاً لمفتاح توقيع — مولّد عشوائي متنبَّأ به يعني مفتاحاً سرياً قابلاً للتخمين، ومفتاح سري قابل للتخمين يعني رموزاً قابلة للتزوير. ولأن التحقق من HMAC يحدث محلياً بالمفتاح السري المشترك، يستطيع مهاجم يلتقط رمزاً أن يكسر مفتاحاً ضعيفاً بالقوة الغاشمة دون اتصال وبلا حدّ معدّل؛ وأدوات مثل hashcat (الوضع 16500) وjwt_tool موجودة لهذا الغرض بالضبط. أما مفتاح عشوائي من 32 بايتاً بإنتروبيا كاملة فهو خارج المتناول حسابياً. والعبرة صريحة: لا تستخدم أبداً كلمة مرور أو كلمة قاموسية أو سلسلة مكتوبة يدوياً كمفتاح JWT سري — ولّد واحداً عشوائياً.

أخيراً، توليد المفتاح على جانب العميل هو بذاته خاصية أمان. يجب ألا يُرسَل مفتاح توقيع إلى طرف ثالث أبداً، ولا حتى الموقع الذي يساعدك على إنشائه. كل بايت هنا يُنتَج ويُرمَّز في متصفحك؛ لا شيء يُرفع أو يُسجَّل أو يُخزَّن. وحين تكون مستعداً لشحن المفتاح، يسلّمك زر «نسخ لـ.env» سطر JWT_SECRET=…، وإن احتجت طيّه في إعداد أكبر فقد يساعد محوّل JSON إلى .env. ولّد، انسخ، خزّنه في مدير أسرار — ودوّره بترويسة kid ونوافذ صلاحية متداخلة حين يحين الوقت.

// The secret you generate here goes straight into your signing code.
// Node.js with jsonwebtoken — the JWT_SECRET env var holds the key.
import jwt from 'jsonwebtoken';

const secret = process.env.JWT_SECRET; // e.g. base64url value from this tool

// Sign a token with HS256 (HMAC-SHA-256).
const token = jwt.sign({ sub: 'user-42', role: 'member' }, secret, {
  algorithm: 'HS256',
  expiresIn: '15m'
});

// Verify it — pin the algorithm to a whitelist; never trust the token's alg.
const payload = jwt.verify(token, secret, { algorithms: ['HS256'] });

// ---------------------------------------------------------------
// Python with PyJWT — same secret, same algorithm pinning.
// import jwt
// token = jwt.encode({"sub": "user-42"}, key, algorithm="HS256")
// payload = jwt.decode(token, key, algorithms=["HS256"])  # whitelist!

// ---------------------------------------------------------------
// Equivalent-strength CLI generation (32 bytes for HS256):
//   openssl rand -base64 32
//   node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
//   python -c "import secrets; print(secrets.token_urlsafe(32))"

الميزات الرئيسية

طول مفتاح واعٍ بالخوارزمية

انتقِ HS256 أو HS384 أو HS512 ويضبط المولّد حجم المفتاح الأدنى وفق RFC 7518 §3.2 تلقائياً — 32 أو 48 أو 64 بايتاً. يمكنك طلب مفتاح أطول، لكن لا يمكنك أبداً أن توفّر بالخطأ مفتاحاً أقصر من اللازم يخالف المواصفة أو ترفض مكتبة صارمة التوقيع به.

ثلاث صيغ إخراج آمنة نصياً

احصل على البايتات العشوائية نفسها بصيغة base64url (ترميز JWT الأصلي الآمن في الروابط دون حشو — الافتراضي)، أو base64 القياسي، أو hex، معروضةً جنباً إلى جنب. base64url هو الافتراضي الأكثر أماناً لـJWT_SECRET؛ بدّل الصيغ حين يتوقع مُحمِّل أو مكتبة محدّدة غيرها. الإنتروبيا متطابقة في الثلاث.

عشوائية آمنة تعمويّاً

يُسحَب كل مفتاح سري من crypto.getRandomValues، مولّد المتصفح العشوائي الآمن تعمويّاً والبدائية وراء توليد مفاتيح Web Crypto. لا Math.random أبداً. يضمن ذلك مفتاحاً بإنتروبيا كاملة بلا بنية متنبَّأ بها — وهي الخاصية التي تضع المفتاح خارج متناول القوة الغاشمة دون اتصال.

نسخ لـ.env بنقرة واحدة

يلفّ «نسخ لـ.env» القيمة في الإسناد المعتاد JWT_SECRET=…، سطر واحد بلا علامات اقتباس — جاهز للّصق في ملف .env أو سرّ Docker أو متغيّر CI دون كتابة اسم المفتاح يدوياً. «نسخ» العادي يأخذ المفتاح الخام حين تحتاج القيمة وحدها.

أوامر سطر أوامر مكافئة

تطبع لوحة أوامر openssl rand وNode crypto.randomBytes وPython secrets المطابقة بسطر واحد للخوارزمية المختارة، لتعيد إنتاج مفتاح متساوي القوة في سكربت توفير أو Dockerfile. تغفل معظم الأدوات المنافسة هذا؛ وهنا هو مدمج.

تقنيع الإظهار / الإخفاء

يُقنَّع المفتاح السري افتراضياً ليبقى خارج الشاشة أثناء عرض توضيحي أو درس أو مشاركة شاشة. اكشفه بأيقونة العين فقط حين تكون مستعداً للنسخ. تضع إجراءات النسخ دائماً المفتاح السري الحقيقي في الحافظة، سواء كان ظاهراً أو مخفياً.

خاص 100%، في المتصفح فقط

يُولَّد المفتاح السري ويُرمَّز ويُعرَض بالكامل على جهازك. لا طلبات شبكة، ولا تسجيل، ولا تخزين — تأكّد في أدوات المطوّر ← الشبكة. يجب ألا يصل مفتاح توقيع إلى طرف ثالث أبداً، وهنا لا يصل أبداً، وهذا هو السبب الكامل لتوليده على جانب العميل.

متوفر بـ15 لغة

الواجهة الكاملة — التسميات والتعليمات والإرشاد — مُترجَمة إلى 15 لغة، لتكون الأداة قابلة للاستخدام وتكون نصيحة الأمان واضحة أينما عمل فريقك.

أمثلة محلولة

توليد مفتاح HS256 سري بصيغة base64url (الافتراضي)

Algorithm: HS256 · Format: base64url
3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0

يوقّع HS256 بـHMAC-SHA-256، لذا تشترط RFC 7518 §3.2 مفتاحاً لا يقل عن 32 بايتاً (256 بت). يسحب المولّد 32 بايتاً عشوائياً آمناً تعمويّاً من crypto.getRandomValues ويرمّزها بـbase64url — الأبجدية الآمنة في الروابط دون حشو، وهي ما يستخدمه JWT نفسه. تتحوّل 32 بايتاً إلى سلسلة base64url من 43 حرفاً. أسقط القيمة مباشرةً في JWT_SECRET. كل نقرة تولّد مفتاحاً سرياً جديداً؛ لا يتكرر شيء مرتين أبداً.

توليد مفتاح HS512 سري (64 بايتاً / 512 بت)

Algorithm: HS512 · Format: base64url
k2Lp9XqA0mNbVcZ7rT4wYsHfGjUe8RoIdPlNkBvM3xQ1aWtCyZuS6FhEgJ (86 chars)

يستخدم HS512 خوارزمية HMAC-SHA-512، وناتج تجزئتها 64 بايتاً، لذا تفرض RFC 7518 §3.2 مفتاحاً لا يقل عن 64 بايتاً (512 بت). تستشعر الأداة الخوارزمية وترفع عدد البايتات تلقائياً — فلن تضطر أبداً إلى تذكّر الحد الأدنى. ترمَّز 64 بايتاً عشوائياً إلى سلسلة base64url من 86 حرفاً، أو 88 حرفاً في base64 القياسي، أو 128 حرفاً hex. اختيار خوارزمية أطول هنا هو الطريق الأسرع بنقرة واحدة لتوفير مفتاح سري بإنتروبيا أعلى.

انسخ المفتاح السري كسطر .env

Click "Copy for .env"
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0

يلفّ «نسخ لـ.env» القيمة المولَّدة في الإسناد المعتاد JWT_SECRET=… لتلصقها مباشرةً في ملف .env أو سرّ Docker أو متغيّر CI دون كتابة اسم المفتاح يدوياً. تبقى القيمة في سطر واحد بلا علامات اقتباس محيطة — تماماً كما تتوقعها المُحمِّلات بنمط dotenv. تحتاج المتغيّر مضمَّناً في إعداد أوسع؟ اقرنه بـمحوّل JSON إلى .env المرتبط أدناه.

أعد إنتاج المفتاح السري من سطر أوامر (بقوة مكافئة)

Show the CLI command
openssl rand -base64 32

تطبع لوحة سطر الأوامر أوامر openssl وNode وPython التي تسحب العدد نفسه من البايتات العشوائية الآمنة للخوارزمية المختارة — openssl rand -base64 32 لـHS256، و…48 لـHS384، و…64 لـHS512. الناتج مفتاح سري متساوي القوة، لا سلسلة مطابقة بايتياً: يُصدر openssl صيغة base64 قياسية بحشو بينما تتبنّى هذه الأداة base64url افتراضياً، فتختلف الأبجديات والأحرف الأخيرة. استخدم ما يناسب سكربت التوفير لديك؛ الإنتروبيا واحدة.

إظهار المفتاح السري وإخفاؤه

Toggle the eye icon
•••••••••••••••••••••••••••••••••••••••••••  ↔  3sJ9aFq2kP7m…

يُقنَّع المفتاح السري افتراضياً كي لا يُلتقَط بالنظر من فوق الكتف أو بتسجيل الشاشة أثناء عرض توضيحي أو مشاركة شاشة. انقر أيقونة العين لكشفه حين تكون مستعداً للنسخ، ثم أخفِه بعدها. يعمل «نسخ» و«نسخ لـ.env» سواء كانت القيمة ظاهرة أو مقنَّعة — فالمفتاح السري الحقيقي هو دائماً ما يصل إلى حافظتك، لا النقاط.

كيفية استخدام مولّد مفتاح JWT السري

  1. 1

    اختر خوارزمية التوقيع

    انتقِ HS256 أو HS384 أو HS512. يطبّق المولّد فوراً الحد الأدنى لطول المفتاح وفق RFC 7518 §3.2 لتلك الصيغة من HMAC — 32 أو 48 أو 64 بايتاً — فلا تضطر أبداً إلى البحث عن الرقم أو المخاطرة بمفتاح أقصر من اللازم.

  2. 2

    اختر صيغة الإخراج

    base64url هو الافتراضي — ترميز JWT الأصلي الآمن في الروابط دون حشو. بدّل إلى base64 القياسي إن توقّعه مُحمِّل، أو hex حين يقبل نظام أحرف 0–f فقط. الثلاثة تُرمّز البايتات العشوائية نفسها بإنتروبيا متطابقة.

  3. 3

    اكشف المفتاح السري وانسخه

    يُقنَّع المفتاح السري افتراضياً لإبقائه خارج الشاشة أثناء عرض توضيحي أو مشاركة شاشة. انقر أيقونة العين لكشفه، ثم «نسخ» لأخذ القيمة الخام أو «نسخ لـ.env» لنسخ سطر JWT_SECRET=… جاهز لملف .env أو متغيّر CI.

  4. 4

    أعد التوليد عند الحاجة

    انقر «إعادة التوليد» لمفتاح سري جديد مستقل مسحوب من crypto.getRandomValues. ولّد مفتاحاً لكل بيئة — لا تعد استخدام مفتاح التوقيع نفسه عبر التطوير والتجهيز والإنتاج أبداً.

  5. 5

    استخدم مكافئ سطر الأوامر أو انتقل إلى التوقيع

    تُظهر لوحة سطر الأوامر أوامر openssl وNode وPython المطابقة بسطر واحد للتوفير المؤتمت. وبمفتاحك بيدك، وقّع رمزاً بـمنشئ JWT وأكّد التوقيع بـمحلّل JWT.

أخطاء شائعة في مفتاح JWT السري

استخدام كلمة مرور أو عبارة قصيرة كمفتاح سري

سلسلة يختارها بشر تحمل إنتروبيا أقل بكثير من اللازم لمفتاح توقيع ويمكن استعادتها دون اتصال بهجوم قاموسي أو قوة غاشمة، وبعدها يمكن تزوير أي رمز. ولّد مفتاحاً سرياً عشوائياً بإنتروبيا كاملة بدلاً من ذلك.

✗ خطأ
JWT_SECRET=mySuperSecret123  →  low entropy, brute-forceable
✓ صحيح
JWT_SECRET=3sJ9aFq2kP7mWcZ1xL0nVtRbYdGhU8eAoI4QpNlKj0  →  32 random bytes

مفتاح أقصر مما تشترطه الخوارزمية

تفرض RFC 7518 §3.2 مفتاح HMAC بطول ناتج التجزئة على الأقل. مفتاح من 16 بايتاً لـHS256 دون عتبة الـ32 بايتاً — يُضعِف التوقيع وترفضه بعض المكتبات صراحةً.

✗ خطأ
16-byte key with HS256  →  below the 32-byte minimum
✓ صحيح
32-byte key with HS256  →  meets RFC 7518 §3.2

توليد المفتاح بـMath.random

Math.random ليس آمناً تعمويّاً — مخرجه متنبَّأ به، فمفتاح سري مبني عليه قابل للتخمين والرموز التي يوقّعها قابلة للتزوير. يجب أن يأتي مفتاح التوقيع من مولّد عشوائي آمن تعمويّاً مثل crypto.getRandomValues.

✗ خطأ
Math.random()-based key  →  predictable, unsafe
✓ صحيح
crypto.getRandomValues key  →  full entropy

إعادة ترميز المفتاح السري قبل التوقيع

خزّن السلسلة التي أنتجتها الأداة بالضبط وأعدها كما هي. فكّ ترميز base64 لها إلى بايتات في خدمة مع معاملتها كسلسلة حرفية في أخرى يعطي الجانبين مفتاحين مختلفين، وكل فحص توقيع يفشل.

✗ خطأ
Service A: raw string · Service B: base64-decoded  →  signatures never match
✓ صحيح
Both services use the identical stored string  →  signatures verify

إعادة استخدام المفتاح السري نفسه عبر كل البيئات

JWT_SECRET واحد يتشاركه التطوير والتجهيز والإنتاج يعني أن تسريباً في أي مكان يزوّر الرموز في كل مكان ويصبح التدوير الكل أو لا شيء. وفّر مفتاحاً سرياً متمايزاً لكل بيئة.

✗ خطأ
Same JWT_SECRET in dev, staging, prod  →  one leak breaks all
✓ صحيح
A unique secret per environment  →  blast radius contained

الوثوق بحقل alg في الرمز عند التحقق

السماح للمُتحقّق بقبول أي خوارزمية يعلنها الرمز يتيح تزوير alg:none وخلط HS/RS. مرّر قائمة بيضاء صريحة بالخوارزميات مهما كان المفتاح السري قوياً.

✗ خطأ
jwt.verify(token, secret)  →  accepts the token's alg
✓ صحيح
jwt.verify(token, secret, { algorithms: ['HS256'] })  →  pinned

من يستخدم هذه الأداة

توفير JWT_SECRET لخدمة جديدة
تطلق واجهة برمجية تُصدر رموزاً موقّعة بـHMAC؟ انتقِ الخوارزمية التي تستخدمها مكتبتك، وانسخ المفتاح السري كسطر JWT_SECRET=…، وأسقطه في بيئة الخدمة. ولّد مفتاحاً متمايزاً للتطوير والتجهيز والإنتاج — لا تشارك مفتاحاً سرياً واحداً عبر البيئات أبداً.
تدوير مفتاح سري مسرّب أو متقادم
حين يُشتبَه بتسريب مفتاح أو يحين موعد تدويره ببساطة، ولّد مفتاحاً سرياً جديداً هنا، وأسنِد له kid جديداً، وانشره بنافذة تداخل كي تواصل الرموز الحيّة التحقق حتى تنتهي صلاحيتها. وفي تسريب مؤكَّد، دوّر فوراً وأسقط المفتاح القديم من المجموعة المقبولة.
استبدال مفتاح ضعيف أو مكتوب يدوياً
ورثت قاعدة شيفرة JWT_SECRET فيها عبارة قصيرة أو قيمة مثال منسوخة؟ ذلك المفتاح قابل للكسر بالقوة الغاشمة دون اتصال. ولّد بديلاً بإنتروبيا كاملة من 32 بايتاً، وبدّله خلف نافذة تدوير، وأغلق ثغرة تزوير الرموز قبل أن تُستغَل.
أتمتة توليد المفاتيح في خط أنابيب
تحتاج إنشاء المفتاح في CI أو Dockerfile بدل يدوياً؟ استخدم أمر openssl أو Node أو Python بسطر واحد من لوحة سطر الأوامر لسكّ مفتاح متساوي القوة داخل سكربت التوفير، واستخدم هذه الصفحة لفهم أطوال البايتات والترميزات التي ينتجها كل أمر.
تعليم توقيع JWT بأمان
اشرح لفريق كيف يعمل HS256 دون كشف مفتاح إنتاج حقيقي أبداً — ولّد مفتاحاً سرياً يُتخلَّص منه على الشاشة (مقنَّعاً حتى تكشفه)، ووقّع رمزاً نموذجياً بـمنشئ JWT، وتحقّق منه بـمحلّل JWT كي تكون دورة التوقيع والتحقق كلها مرئية.
قارن أحجام مفاتيح HS256 وHS384 وHS512
تقرّر أي صيغة من HMAC تعتمدها؟ تنقّل بين الخوارزميات لترى كيف ينمو طول المفتاح المطلوب والسلسلة المرمَّزة — 43 و64 و86 حرف base64url — واختر مقايضة القوة مقابل حجم الرمز التي تناسب نظامك قبل أن تثبّتها في الإعداد.
توليد مفاتيح للتطوير المحلي
تحتاج مفتاحاً سرياً سريعاً وصالحاً لتشغيل تدفّق مصادقة محلي؟ ولّد واحداً بنقرة، وانسخه لـ.env، وقد انفكّ حظرك — بمفتاح من مولّد عشوائي آمن تعمويّاً حقيقي بدل قيمة نائبة ستنسى استبدالها قبل النشر.

كيف يعمل المولّد

crypto.getRandomValues (مولّد عشوائي آمن تعمويّاً)
تُولَّد الأسرار بملء Uint8Array بـcrypto.getRandomValues، مولّد Web Crypto العشوائي الزائف الآمن تعمويّاً. هو مصدر الإنتروبيا نفسه الذي يدعم توليد مفاتيح Web Crypto. لا يُستخدم Math.random أبداً في أي مكان — فهو متنبَّأ به إحصائياً وغير صالح لأي مفتاح تعموي.
تحجيم المفتاح وفق RFC 7518 §3.2
يتبع عدد البايتات لكل خوارزمية اشتراط JSON Web Algorithms بأن يكون مفتاح HMAC بحجم ناتج التجزئة على الأقل: 32 بايتاً لـHS256 (SHA-256)، و48 لـHS384 (SHA-384)، و64 لـHS512 (SHA-512). يضبط اختيار الخوارزمية الحد الأدنى؛ ولن يُصدر المولّد مفتاحاً دون عتبة المواصفة.
ترميزات RFC 4648 (base64url / base64 / hex)
تُرمَّز البايتات الخام بأبجديات RFC 4648. يستخدم base64url الأبجدية الآمنة في الروابط دون حشو (32 بايتاً ← 43 حرفاً)، ويستخدم base64 القياسي حشو + و/ و= (← 44 حرفاً)، ويكتب hex حرفين لكل بايت (← 64 حرفاً). تبديل الصيغ يعيد ترميز البايتات نفسها — الإنتروبيا الكامنة لا تتغير.
لماذا base64url هو الافتراضي
مكوّنات JWT نفسها مرمَّزة بـbase64url، والأبجدية الآمنة في الروابط دون حشو تعني أن مفتاحاً سرياً بـbase64url لا يحتاج أبداً إلى هروب في ترويسة أو رابط أو ملف إعداد. قد ينكسر + و/ وحشو = الأخير في base64 القياسي في تلك السياقات، لذا base64url هو الافتراضي المتحفّظ لـJWT_SECRET.
تنسيق «نسخ لـ.env»
يُصدر «نسخ لـ.env» JWT_SECRET=<value> في سطر واحد بلا علامات اقتباس محيطة — الشكل الذي تحلّله المُحمِّلات بنمط dotenv دون تعديل. لا يحوي المفتاح السري الخام أبداً أحرفاً تستلزم اقتباساً في ملف .env، فالسطر آمن للّصق كما هو.
أوامر سطر أوامر متساوية القوة، لا مطابقة بايتياً
أوامر openssl rand -base64 N وNode randomBytes(N).toString('base64url') وPython secrets.token_urlsafe(N) في لوحة سطر الأوامر تسحب جميعها N بايتاً عشوائياً آمناً للخوارزمية المختارة. تنتج مفاتيح متساوية القوة، لا السلسلة نفسها — يُصدر openssl base64 قياسياً بحشو، فتختلف الأبجدية والأحرف الأخيرة عن افتراضي هذه الأداة base64url.

أفضل ممارسات مفتاح JWT السري

طابِق طول المفتاح مع الخوارزمية
استخدم 32 بايتاً على الأقل لـHS256، و48 لـHS384، و64 لـHS512، كما تشترط RFC 7518 §3.2. يفعل هذا المولّد ذلك عنك، لكن إن حجّمت مفتاحاً يدوياً فلا تنزل أبداً دون طول ناتج التجزئة — مفتاح HMAC أقصر من اللازم يُضعِف التوقيع وقد ترفضه المكتبات الصارمة.
ولّد دائماً بمولّد عشوائي آمن تعمويّاً، لا بكلمة مرور
مفتاح JWT السري اعتماد آلة لا يحتاج أحد إلى حفظه، فأنفِق الإنتروبيا الكاملة: استخدم مفتاحاً عشوائياً آمناً تعمويّاً، لا عبارة مرور أو كلمة قاموسية أو سلسلة مكتوبة يدوياً. الأسرار التي يختارها البشر هي الهدف الأسهل لهجمات القوة الغاشمة دون اتصال التي تؤتمتها أدوات كسر JWT.
استخدم مفتاحاً سرياً فريداً لكل بيئة
يجب أن يكون للتطوير والتجهيز والإنتاج كلٍّ منها JWT_SECRET خاص به. مشاركة مفتاح واحد تعني أن تسريباً في بيئة منخفضة المخاطر يزوّر الرموز في كل مكان، وتجعل التدوير الكل أو لا شيء. ولّد مفتاحاً سرياً منفصلاً هنا لكل بيئة وخزّن كلاً منه في نطاق مدير أسرار خاص به.
ثبّت الخوارزمية عند التحقق
على جانب التحقق، مرّر دائماً قائمة بيضاء صريحة بالخوارزميات — algorithms: ['HS256'] في jsonwebtoken، وalgorithms=["HS256"] في PyJWT — ولا تثق أبداً بحقل alg داخل الرمز. قبول الخوارزمية التي يعلنها الرمز عن نفسه يتيح هجمات خلط الخوارزمية الكلاسيكية وalg:none للتزوير، مهما كان مفتاحك قوياً.
دوّر بترويسة kid ومفاتيح متداخلة
وسِم الرموز الموقّعة بمُعرّف مفتاح (kid) وانشر المفاتيح النشطة عبر نقطة نهاية JWKS كي تدوّر دون توقّف: وقّع الرموز الجديدة بالمفتاح الجديد مع استمرار قبول القديم حتى تنتهي صلاحية رموزه. وعند الاشتباه بتسريب، تخطَّ التداخل وألغِ المفتاح القديم فوراً.

الأسئلة الشائعة

هل يُرسَل مفتاح JWT السري المولَّد إلى خادمكم؟
لا. يُولَّد المفتاح السري بالكامل في متصفحك بـcrypto.getRandomValues، مولّد الأرقام العشوائية الآمن تعمويّاً في المنصّة. تُنتَج البايتات على جهازك وتُرمَّز محلياً وتظهر لك وحدك. لا شيء يُرفع، ولا شيء يُسجَّل، ولا شيء يُكتَب إلى القرص، ولا شيء يُرسَل إلى أي طرف ثالث — افتح أدوات المطوّر ← الشبكة وسترى صفر طلبات تنطلق حين تنقر «إعادة التوليد» أو «نسخ». يعني ذلك أن أي مفتاح تولّده هنا ملكك وحدك لحظة ظهوره؛ لا يراه أي خادم أبداً. هذا هو جوهر توليد مفتاح التوقيع على جانب العميل بدل موقع قد يحتفظ — من حيث المبدأ — بنسخة من كل مفتاح يصدره.
كيف أولّد مفتاح JWT سرياً آمناً؟
ثلاث خطوات. أولاً، اختر خوارزمية التوقيع التي يستخدمها تطبيقك — HS256 أو HS384 أو HS512 — وسيضبط المولّد فوراً حجم المفتاح إلى الحد الأدنى الذي تفرضه RFC 7518 §3.2 لتلك الصيغة (32 أو 48 أو 64 بايتاً)، فلا تختار رقماً بنفسك ولا تخاطر بمفتاح أقصر من اللازم. ثانياً، أبقِ الترميز على base64url (صيغة JWT الأصلية الآمنة في الروابط) أو بدّل إلى base64 أو hex إن كان مُحمِّل إعدادك يتوقع أحدهما. ثالثاً، انقر «نسخ» — أو «نسخ لـ.env» للحصول على سطر JWT_SECRET=… جاهز للّصق — وخزّن القيمة في مدير أسرار أو متغيّر بيئة، لا في التحكم بالمصدر أبداً. ولأن كل بايت يأتي من crypto.getRandomValues، يحمل مفتاح من 32 بايتاً أصلاً 256 بت من الإنتروبيا، وهو ما يتجاوز بكثير متناول هجمات القوة الغاشمة دون اتصال التي تكسر الأسرار التي يختارها البشر. تفضّل سطر الأوامر؟ تطبع الأداة أيضاً أوامر openssl وNode وPython المكافئة بسطر واحد تلصقها في الطرفية.
كم يجب أن يكون طول مفتاح JWT السري لـHS256؟
32 بايتاً على الأقل (256 بت). تنصّ RFC 7518 §3.2 — مواصفة خوارزميات JSON Web Algorithms — على أنه بالنسبة لتواقيع HMAC «يجب استخدام مفتاح بحجم ناتج التجزئة (مثلاً 256 بت لـHS256) أو أكبر». يوقّع HS256 بـHMAC-SHA-256 (تجزئة 256 بت)، لذا الحد الأدنى للمفتاح 32 بايتاً؛ ويستخدم HS384 خوارزمية HMAC-SHA-384 ويحتاج 48 بايتاً على الأقل (384 بت)؛ ويستخدم HS512 خوارزمية HMAC-SHA-512 ويحتاج 64 بايتاً على الأقل (512 بت). يختار هذا المولّد الحد الأدنى الصحيح تلقائياً حين تنتقي الخوارزمية، ويمكنك طلب مفتاح أطول. المفتاح الأقصر ليس أضعف فحسب — إنه يخالف المواصفة، وبعض المكتبات سترفض التوقيع به.
ما الفرق بين base64url وbase64 وhex، وأيها أختار؟
الثلاثة تُرمّز البايتات العشوائية نفسها؛ وتختلف فقط في أبجدية الأحرف، لا في الإنتروبيا. base64url هو ترميز JWT الأصلي — يستخدم أبجدية آمنة في الروابط (- و_ بدل + و/) ويحذف الحشو، فلا يحتاج أبداً إلى هروب داخل رمز أو رابط أو ترويسة. لهذا هو الافتراضي هنا. يستخدم base64 القياسي + و/ وحشو =؛ اختره حين يتوقع مُحمِّل إعداد أو مكتبة base64 الكلاسيكي تحديداً. يكتب hex (base16) كل بايت حرفين من 0–f، منتجاً سلسلة أطول لكن لا لبس فيها، تفيد حين يرفض نظام الأحرف غير الأبجدية الرقمية. لمتغيّر بيئة JWT_SECRET، base64url هو الافتراضي الأكثر أماناً؛ وأي من الثلاثة يعمل ما دمت تخزّن السلسلة بالضبط وتعيدها إلى مكتبة التوقيع دون تغيير.
هل يمكن كسر مفتاح JWT سري ضعيف؟
نعم — وهذا أكبر خطر منفرد مع رموز JWT الموقّعة بـHMAC. لأن HS256/384/512 تستخدم مفتاحاً سرياً مشتركاً واحداً، يستطيع أي شخص يملك رمزاً تشغيل هجوم قوة غاشمة أو قاموسي دون اتصال ضد التوقيع، بلا حدّ معدّل ولا تواصل مع خادم. أدوات مثل hashcat (يستهدف الوضع 16500 رموز JWT) وjwt_tool مبنية خصيصاً لهذا؛ وعلى وحدات معالجة رسومات شائعة قد يسقط مفتاح منخفض الإنتروبيا عادةً في ثوانٍ إلى ساعات، وقد تسقط كلمة قاموسية أو كلمة مرور مسرّبة على الفور تقريباً. أما مفتاح عشوائي من 32 بايتاً بإنتروبيا كاملة من هذا المولّد فهو بعيد جداً عن متناول القوة الغاشمة. وما إن يستعيد المهاجم المفتاح السري حتى يستطيع تزوير أي رمز — بما فيه رمز يدّعي صلاحيات مسؤول — لذا قوة المفتاح ليست اختياراً. ولّد مفتاح التوقيع بمولّد عشوائي آمن تعمويّاً، لا بسلسلة يختارها بشر. لمعالجة أعمق لهجمات المفتاح الضعيف وخلط الخوارزمية وإعادة تشغيل الرمز، راجع دليلنا إلى أفضل ممارسات أمان JWT.
هل يمكنني استخدام كلمة مرور كمفتاح JWT سري؟
يمكنك، لكن لا يجدر بك. كلمة مرور يحفظها بشر — حتى عبارة مرور طويلة — تحمل إنتروبيا أقل بكثير من 32 بايتاً عشوائياً، مما يجعلها هدفاً واقعياً لهجمات القوة الغاشمة والقاموسية دون اتصال الموصوفة أعلاه. أسرار JWT اعتمادات من آلة إلى آلة؛ لا أحد يحتاج إلى حفظها، فلا سبب لمقايضة الإنتروبيا بسهولة التذكّر. ولّد مفتاحاً سرياً عشوائياً هنا، وخزّنه في مدير أسرار أو متغيّر بيئة، ودع تطبيقك يقرؤه. إن احتجت اعتمادات يسهل تذكّرها لغرض آخر، فتلك مهمة مولّد كلمات المرور، أو — لتخزين كلمات مرور المستخدمين — تجزئة أحادية الاتجاه من مولّد bcrypt — لا لمفتاح توقيع رمز.
كيف أدوّر مفتاح JWT سرياً دون كسر الرموز الحيّة؟
دوّر بتداخل بدل تبديل حادّ. أضف مُعرّف مفتاح (ترويسة kid) إلى الرموز التي توقّعها كي يعرف المُتحقّق أي مفتاح سري يفحص مقابله، وانشر مفاتيحك النشطة — عادةً عبر نقطة نهاية JWKS تقرؤها خدماتك. للتدوير: ولّد مفتاحاً سرياً جديداً هنا، وابدأ توقيع الرموز الجديدة بـkid الجديد مع استمرار قبول المفتاح السابق للتحقق، ولا تتقاعد المفتاح القديم إلا بعد انتهاء صلاحية كل رمز وُقِّع به. نافذة التداخل تلك تعني ألا تُبطَل أي جلسة صالحة في منتصف الطريق. وعند الاشتباه بتسريب، تخطَّ التداخل الرشيق: دوّر فوراً، وأسقط المفتاح القديم من المجموعة المقبولة، وافرض إعادة المصادقة كي تتوقف الرموز المسرّبة عن التحقق على الفور.
كيف يختلف مفتاح HMAC (HS*) عن مفتاح RSA أو ECDSA (RS*/ES*)؟
يحلّان المشكلة نفسها بنموذجَي مفتاح متعاكسين. HS256/384/512 خوارزميات HMAC: تستخدم مفتاحاً سرياً متماثلاً واحداً — من النوع الذي تولّده هذه الأداة — يوقّع ويتحقّق معاً، فكل طرف يستطيع التحقق من رمز يستطيع أيضاً تزويره. هذا بسيط وسريع ومثالي حين تُصدر خدمة واحدة رموزها وتفحصها بنفسها. أما RS* (RSA) وES* (ECDSA) فغير متماثلة: تستخدم زوج مفاتيح، حيث يوقّع مفتاح خاص ويتحقّق مفتاح عام منفصل فقط. تسلّم المفتاح العام لأي طرف يحتاج إلى التحقق من الرموز دون كشف مفتاح التوقيع — الخيار الصحيح حين يُصدر مزوّد هوية رموزاً تتحقق منها خدمات مستقلة كثيرة. ينتج هذا المولّد أسرار HMAC المتماثلة فقط. لتجميع رمز فعلي وتوقيعه بالمفتاح الذي تولّده، استخدم منشئ JWT؛ ولفحص رمز والتحقق منه، استخدم محلّل JWT.

أدوات ذات صلة

عرض جميع الأدوات →

مولّد تجزئة bcrypt والتحقق منها

أدوات الأمن

ولّد تجزئات كلمات المرور بـ bcrypt وتحقق منها أونلاين — تكلفة قابلة للضبط، بادئات $2b$/$2a$/$2y$. 100% في متصفحك؛ كلمة مرورك لا تُرفع أبداً.

محلّل JWT — فك ترميز الرموز

أدوات الأمن

فك ترميز رموز JWT أونلاين مع محلّل JWT المجاني. افحص الترويسة والحمولة والتوقيع وانتهاء الصلاحية والخوارزمية والمطالبات فوراً. 100% في المتصفح — رمزك لا يغادر جهازك. بلا تسجيل، بلا تتبّع.

مُنشئ وترميز JWT

أدوات الأمن

مولّد ومرمّز JWT مجاني أونلاين. ابنِ الترويسة والحمولة، ووقّع بـ HS256 أو RS256 أو ES256 فوراً. 100% في المتصفح — سرّك ومفتاحك لا يغادران جهازك.

مولّد تجزئة MD5 — فوري ومجاني أونلاين

أدوات الأمن

أنشئ تجزئة MD5 وSHA-256 وSHA-1 وSHA-512 فوراً — أداة مجانية تعمل في متصفّحك بدون تتبّع أو رفع بيانات. الصق النص واحصل على التجزئة في ثانية. جرّبها الآن.

مولّد كلمات مرور عشوائية — قوي وآمن ومجاني

أدوات الأمن

ولّد كلمات مرور عشوائية قوية فوراً — أداة مجانية أونلاين تعمل في متصفّحك فقط. خصّص الطول والأحرف، دُفعات حتى 50 مع تحليل الإنتروبيا. بياناتك لا تغادر جهازك.

مولّد تجزئة SHA-1 (160 بت — إرث)

أدوات الأمن

أنشئ تجزئات SHA-1 في متصفحك — مخرجات سداسية من 40 حرفاً، بدون رفع. أداة إرثية لمعرّفات Git وفحص الشهادات القديمة وعمليات التدقيق. بياناتك لا تغادر جهازك.