Node.js • المستوى الثالث • الدرس 3
العودة لفهرس المستوىتشفير كلمات المرور والتأمين (Password Hashing & Bcrypt)
أهداف الدرس العلمية
- تجنب حفظ كلمات المرور بنصوص صريحة (Plain Text) لحماية بيانات المستخدمين.
- فهم دور مكتبة
bcryptومفهوم Salt في تحصين التشفير. - استخدام وحدة
cryptoالمدمجة في Node.js للتشفير الآمن. - دالة مقارنة (Compare) للتحقق من كلمة المرور دون كشفها.
1. لماذا نشفر كلمات المرور؟
في حال تم الوصول لقاعدة البيانات، يمنع التشفير أحادي الاتجاه (Hashing) إمكانية قراءة كلمة المرور الأصلية بأي شكل من الأشكال.
javascript
// ⚠️ خطأ فادح — لا تفعل هذا أبداً
db.users.insert({ email: '[email protected]', password: '123456' });
// ✅ الصحيح — تشفير آمن
const bcrypt = require('bcrypt');
const hashed = await bcrypt.hash('123456', 10);
db.users.insert({ email: '[email protected]', password: hashed });2. المكونات الأربعة للتشفير الآمن
🔒 Hash
تحويل النص إلى بصمة ثابتة لا يمكن عكسها.
🧂 Salt
نص عشوائي يُضاف قبل التشفير لمنع هجمات Rainbow Tables.
🔁 Iterations
عدد مرات تكرار التشفير لزيادة الوقت المطلوب للكسر.
🔑 Algorithm
الخوارزمية: bcrypt, scrypt, argon2 (الأفضل حالياً).
التطبيق العملي المباشر
تحدي الدرس الثالث: اختبار قوة التشفير
قم بالتعديل على الكود في المحرر أدناه:
- أضف اختباراً صريحاً يطابق كلمة المرور الصحيحة
"secret123456"ويطبع النتيجة. - أضف اختباراً يطابق كلمة المرور الخاطئة
"wrong-password". - أضف اختباراً يُشفّر نفس كلمة المرور مرتين بـ Salt مختلف، واطبع هل التشفيران متساويان.
- لاحظ أن النتيجة
false— وهذا دليل قوة Salt العشوائي.
⏳ جارٍ تحميل المحرر التفاعلي...