مولّد Base64 عشوائي

أنشئ سلاسل Base64 عشوائية باستخدام مولّد الأرقام العشوائية الآمن في متصفحك. اضبط الطول بالبايتات أو بالأحرف، وولّد ما يصل إلى 1000 سلسلة دفعة واحدة، واختر بين المخرجات القياسية والآمنة لعناوين URL.

تعمل بالكامل داخل متصفحك، ولا يُرفع أي شيء.

طريقة الاستخدام

  1. اضبط «الطول»، واختر في «الوحدة» ما إذا كان يُحسب بـ «بايتات البيانات العشوائية» أو بـ «الأحرف» في Base64. ولتوليد مفتاح، استخدم البايتات: فـ 32 بايتًا تعني مفتاحًا بطول 256 بت.
  2. اضبط «العدد» على عدد السلاسل التي تحتاجها، واختر «الفاصل» بينها: «سطر جديد» أو «فاصلة» أو «مسافة».
  3. اختر في «النوع» القيمة «قياسي» أو «آمن لعناوين URL». ومع وحدة البايتات يمكنك أيضًا إيقاف «الحشو» إذا كان النظام المستهدف لا يتوقع علامات =.
  4. انقر «توليد» للحصول على قيم جديدة، ثم انقر «نسخ الكل» أو نزّل القائمة عبر «تنزيل».

البايتات والأحرف والإنتروبيا

تُقاس قوة السلسلة العشوائية بعدد بتات الإنتروبيا. فكل بايت عشوائي يضيف 8 بتات، لذا تعطي 16 بايتًا 128 بت، وتعطي 32 بايتًا 256 بت. ولا يغيّر Base64 إلا طريقة كتابة هذه البايتات: فكل حرف يحمل 6 بتات، وكل 3 بايتات تصبح 4 أحرف. وتعرض الأداة إنتروبيا كل سلسلة، فيمكنك التحقق منها بنظرة سريعة.

عند اختيار بايتات البيانات العشوائية وحدةً، تُفك المخرجات إلى هذا العدد بالضبط من البايتات العشوائية، وهذا ما تحتاجه المفاتيح والأسرار. وعند اختيار الأحرف، تحصل على عدد محدد بالضبط من الأحرف، يُختار كل منها باحتمال متساوٍ من الأبجدية المكوّنة من 64 حرفًا؛ استخدمها عندما يطلب نظام ما رمزًا مميزًا بطول ثابت ويخزّنه نصًا.

البايتاتأحرف Base64الإنتروبياالاستخدام المعتاد
121696 بتقيمة nonce (IV) في AES-GCM
1624 (22 بلا حشو)128 بتقيم الملح، ورموز الجلسات وCSRF، ومفاتيح AES-128
3244 (43 بلا حشو)256 بتمفاتيح AES-256 وHMAC-SHA256، والمفاتيح السرية لـ HS256، ومفاتيح API
6488 (86 بلا حشو)512 بتمفاتيح HMAC-SHA512، والمفاتيح السرية لـ HS512

أين تُستخدم قيم Base64 العشوائية

  • المفاتيح السرية لـ JWT. يشترط RFC 7518 ألا يقل طول مفتاح HMAC عن طول مخرجات دالة التجزئة: 32 بايتًا لـ HS256، و48 لـ HS384، و64 لـ HS512. تستخدم بعض المكتبات سلسلة المفتاح السري كما هي، بينما تفك مكتبات أخرى ترميزها من Base64 أولًا، لذا تحقّق مما تتوقعه مكتبتك. وتتحقق أداة فك ترميز JWT من تواقيع HS256 حتى HS512 بأي من نوعي المفتاح السري، ويقبل مولّد HMAC المفتاح نصًا أو بالصيغة الست عشرية أو بترميز Base64.
  • مفاتيح التطبيقات. يحفظ Laravel مثلًا مفتاح تشفير من 32 بايتًا في ملف .env بالصيغة APP_KEY=base64:...، وهي الصيغة نفسها لسلسلة من 32 بايتًا تولّدها هذه الأداة.
  • Kubernetes Secrets. يجب أن تكون القيم الموجودة تحت data بترميز Base64 القياسي مع الحشو. ويمكن وضع سلسلة مولّدة بوحدة البايتات مع النوع «قياسي» وتفعيل الحشو هناك مباشرةً، فيتلقى الـ Pod البايتات العشوائية الخام. أما إذا كان التطبيق يتوقع نص Base64 نفسه، فضعه تحت stringData بدلًا من ذلك.
  • الرموز المميزة في عناوين URL. ينبغي أن تستخدم روابط إعادة تعيين كلمة المرور ورموز الدعوة وغيرها من الرموز المميزة التي تنتقل عبر عناوين URL النوعَ الآمن لعناوين URL، الذي يضع - و_ مكان + و/. راجع Base64URL لمزيد من التفاصيل.

لماذا تولّد الأداة القيم العشوائية باستخدام crypto.getRandomValues وليس Math.random

Math.random() مولّد سريع للأغراض العامة. ولم تُصمَّم مخرجاته لتكون غير قابلة للتنبؤ، بل يمكن في بعض المحركات إعادة بناء حالته الداخلية من عدد قليل من القيم. أما هذه الأداة فتستخدم crypto.getRandomValues()، وهو مولّد آمن تشفيريًا يستمد بذرته من نظام التشغيل، أي من نوع المصدر نفسه الذي يعتمد عليه openssl rand ووحدة secrets في Python. وتُنشأ القيم على جهازك ولا تُرسل أو تُخزَّن أبدًا.

توليد Base64 عشوائي في الشيفرة البرمجية

# Shell: 32 بايتًا عشوائيًا بترميز Base64 (44 حرفًا)
openssl rand -base64 32
head -c 32 /dev/urandom | base64

# Python
import base64, secrets
base64.b64encode(secrets.token_bytes(32)).decode()
secrets.token_urlsafe(32)        # آمن لعناوين URL، بلا حشو، 43 حرفًا

// Node.js
const crypto = require('crypto');
crypto.randomBytes(32).toString('base64');
crypto.randomBytes(32).toString('base64url');   // آمن لعناوين URL، بلا حشو

// المتصفح
const bytes = crypto.getRandomValues(new Uint8Array(32));
btoa(String.fromCharCode(...bytes));

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

ما الطول المناسب لمفتاح أو سر عشوائي؟

تكفي 16 بايتًا (128 بت) للقيم التي لا يُشترط فيها إلا أن تكون فريدة ويستحيل تخمينها، مثل معرّفات الجلسات ورموز CSRF وقيم الملح. واستخدم 32 بايتًا (256 بت) لمفاتيح AES-256 ومفاتيح HMAC-SHA256 والمفاتيح السرية لـ HS256، و64 بايتًا لـ HMAC-SHA512 وHS512.

هل هذا مماثل لـ openssl rand -base64 32؟
ينتج النوع نفسه من القيم. فمع طول 32 بايتًا والنوع «قياسي» وتفعيل الحشو، يبلغ طول كل نتيجة 44 حرفًا، وتنتهي بعلامة = واحدة، وتُفك إلى 32 بايتًا عشوائيًا. أما القيم نفسها فتختلف بالطبع في كل مرة.
هل أستخدم وحدة البايتات أم وحدة الأحرف؟

استخدم البايتات عندما ستُفك السلسلة لاحقًا، كما في مفاتيح التشفير وKubernetes Secrets. واستخدم الأحرف عندما يحتاج نظام ما رمزًا مميزًا بطول محدد بالضبط ويستخدم النص كما هو. ولا يُضمن أن تُفك سلسلة مولّدة بوحدة الأحرف فكًا سليمًا إلا إذا كان طولها من مضاعفات 4.

متى أحتاج إلى النوع الآمن لعناوين URL؟
كلما وُضعت القيمة في عنوان URL أو سلسلة استعلام أو ملف تعريف ارتباط (cookie) أو اسم ملف. ففي Base64 القياسي، تفصل / بين أجزاء مسارات URL، وتتحول + إلى مسافة في سلاسل الاستعلام المرمّزة بصيغة النماذج. أما Base64 الآمن لعناوين URL فيستخدم - و_ بدلًا منهما، ويُكتب عادةً بلا حشو.
هل تُخزَّن القيم المولّدة أو تُرسل إلى أي مكان؟

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