مولد bcrypt
ما زال bcrypt أحد أكثر الخيارات أمانا لتخزين كلمات المرور. فهو بطيء عمدا، ويشتق salt الخاص به، ويتدرج أمام تحسن العتاد عبر معامل cost قابل للضبط. يولد هذا المولد hash متوافقا مع معيار bcrypt من كلمة مرور نصية حتى تستطيع إنشاء مستخدم اختبار، أو ترحيل حساب بين أنظمة، أو مقارنة القيم مع hash موجود في عمود users.password.
كيفية تجزئة كلمة مرور باستخدام bcrypt
-
1
أدخل كلمة المرور النصية
حتى 72 بايت — يقتطع bcrypt ما بعد ذلك بصمت.
-
2
اختر عامل cost
10 هو الافتراضي الحالي؛ 12 شائع للأنظمة الجديدة؛ 14 حذر جدا. كل +1 يضاعف زمن التجزئة تقريبا.
-
3
ينشأ salt عشوائي
تسحب 16 بايت من salt من RNG تشفيري وتدمج داخل سلسلة hash الناتجة.
-
4
انسخ hash
الخرج سلسلة تصف نفسها مثل `$2b$12$...` وتتضمن version وcost وsalt وdigest.
تشريح hash من bcrypt
$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
| | | |
| | salt (22 Base64 chars) digest (31 Base64 chars)
| cost (2 digits, 4-31)
version (2a, 2b, 2y — all bcrypt)
السلسلة كلها 60 محرفا. الأعمدة من نوع VARCHAR(60) أو CHAR(60) هي المخطط القياسي.
توصيات عامل cost
| Cost | الزمن التقريبي لكل hash (2024 CPU) | الاستخدام |
|---|---|---|
| 10 | ~80 ms | افتراضي legacy، ما زال مقبولا |
| 12 | ~300 ms | خط الأساس الموصى به حاليا |
| 13 | ~600 ms | تطبيقات أعلى أمانا |
| 14 | ~1.2 s | حذر جدا؛ تأخير تسجيل دخول ملحوظ |
كل زيادة تضاعف عامل العمل. إذا كانت زمنية تسجيل الدخول تحت 500 ms حرجة، فابق بين 10 و12.
بايت الإصدار: 2a مقابل 2b مقابل 2y
$2a$— مواصفة 1999 الأصلية. معظم المكتبات تصدر hashes بعلامة2a.$2b$— مراجعة 2014 التي أصلحت خطأ اقتطاع في crypt_blowfish. مفضل للـ hashes الجديدة.$2y$— وسم خاص بـ PHP، ومكافئ وظيفيا لـ$2b$.
تتحقق الثلاثة ضد بعضها؛ الاختلاف الوحيد هو الوسم داخل سلسلة hash.
مما يحمي bcrypt
- Rainbow tables — salt فريد لكل hash يهزم الجداول المحسوبة مسبقا.
- GPU/ASIC cracking — جدول مفاتيح Blowfish مقيد بالذاكرة وعدائي تجاه GPUs. ليس معاديا لـ GPU مثل Argon2، لكنه ما زال بطيئا في brute force.
- Database leaks — لا يمكن استرجاع النص الصريح من hash إلا بالقوة الغاشمة.
ما لا يحمي منه bcrypt: كلمات المرور الضعيفة (استخدم حدا أدنى للطول وافحص قوائم التسريبات)، وcredential stuffing (استخدم عاملا ثانيا)، والتصيد.
حد 72 بايت
يستخدم bcrypt أول 72 بايت فقط من كلمة المرور. المدخلات الأطول تقتطع بصمت، وهذا هو السبب نفسه الذي يجعل كثيرا من المكتبات توصي الآن بتجزئة كلمة المرور مسبقا بـ SHA-256 قبل تمريرها إلى bcrypt. البدائل الحديثة (Argon2 وscrypt) لا تملك هذا الحد.
الأسئلة الشائعة
نعم لتخزين كلمات المرور، عند cost ≥ 12. ما زال OWASP يدرجه كخوارزمية مقبولة. Argon2id هو الخيار المفضل للأنظمة الجديدة، لكن ترحيل hashes bcrypt القديمة ليس أولوية عالية.
لأن salt يولد عشوائيا لكل hash. يأخذ التحقق salt من hash المخزن، ويعيد تجزئة كلمة المرور المرسلة به، ثم يقارن.
معظم المكتبات لا تكشف هذا الخيار، ولسبب وجيه — salts القابلة للتنبؤ تهزم الفكرة. استخدم salt الذي تولده المكتبة؛ هذا هو المسار الآمن.
نعم — عامل العمل متناظر. التحقق من hash بتكلفة 14 يستغرق 16x أكثر من التحقق من hash بتكلفة 10. اضبطه مع وضع قدرة تسجيل الدخول لديك في الحسبان.
أدوات ذات صلة
مشفر شفرة Atbash
شفّر النص أو فك تشفيره باستخدام شفرة Atbash، وهي استبدال عبري يطابق A-Z مع Z-A. العملية نفسها تشفر وتفك التشفير.
تشفير / فك تشفير AES
شفر وفك نصا منخفض المخاطر باستخدام شفرات AES في OpenSSL. يتم تجزئة عبارة المرور بـ SHA-256، ويحتوي خرج Base64 على IV زائد النص المشفر.
مرمز شفرة A1Z26
رمز النص باستخدام شفرة A1Z26 (A=1, B=2, ... Z=26) أو فك تسلسل أرقام إلى حروف، مع فاصل قابل للتخصيص.
مولد Hash bcrypt
ولّد hashes من نوع bcrypt أو تحقق من كلمة مرور نصية مقابل hash bcrypt موجود. وضعا التوليد والتحقق جنبا إلى جنب في أداة واحدة.
مشفر ومفكك Base32
شفّر وفك ترميز سلاسل Base32 باستخدام أبجدية RFC 4648. مفيد لأسرار TOTP والرموز غير الحساسة لحالة الأحرف والمعرفات التي يكتبها البشر.
مشفر ومفكك Base85
شفّر وفك ترميز Base85 في متغير Adobe Ascii85 (PostScript/PDF) أو Z85 (ZeroMQ). أكثف من Base64 للبيانات الثنائية.