NahdaAIنهضة
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 (الأفضل حالياً).

التطبيق العملي المباشر

تحدي الدرس الثالث: اختبار قوة التشفير

قم بالتعديل على الكود في المحرر أدناه:

  1. أضف اختباراً صريحاً يطابق كلمة المرور الصحيحة "secret123456" ويطبع النتيجة.
  2. أضف اختباراً يطابق كلمة المرور الخاطئة "wrong-password".
  3. أضف اختباراً يُشفّر نفس كلمة المرور مرتين بـ Salt مختلف، واطبع هل التشفيران متساويان.
  4. لاحظ أن النتيجة false — وهذا دليل قوة Salt العشوائي.
⏳ جارٍ تحميل المحرر التفاعلي...