Avatar ·

التجزئة الآمنة وإضافة الملح لكلمات المرور في PHP

مرحبًا بالجميع! أنا مطور PHP مبتدئ وأحاول فهم التخزين الآمن لكلمات مرور المستخدمين. حاليًا أستخدم MD5 مع الملح، لكن قيل لي إن هذا غير آمن. الكود الحالي الخاص بي يبدو هكذا: ```php function createPassword($password) { $salt = 'my_very_secret_salt_12345'; return md5($salt . $password); } function checkPassword($password, $hash) { $salt = 'my_very_secret_salt_12345'; return md5($salt . $password) === $hash; } ``` أفهم أن MD5 قديم، لكني لا أعرف بماذا أستبدله. سمعت عن bcrypt و password_hash و password_verify، لكني لا أفهم كيفية استخدامها بشكل صحيح. الأسئلة الرئيسية: 1. كيف يتم إنشاء الملح بشكل صحيح لكل كلمة مرور؟ 2. هل يجب تخزين الملح بشكل منفصل وكيف يتم تمريره عند التحقق؟ 3. ما هي الخوارزميات التي تُعتبر آمنة حاليًا في PHP؟ 4. كيف يمكن الحماية من هجمات القوة العمياء (brute force) والجداول قوس قزح (rainbow tables)؟ سأكون ممتنًا لأمثلة كود مفصلة مع شروحات. أريد أن أفهم ليس فقط "كيف"