تجزئة وتشفير كلمات المرور في PHP: أفضل الممارسات لعام 2025

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التجزئة والملح وأمانك: لماذا هذا مهم في عام 2025؟

\n\n

تخيل: لقد أنشأت موقعًا رائعًا، كل شيء يعمل، والمستخدمون يسجلون. ولكن في يوم من الأيام، تتسرب قاعدة البيانات إلى الإنترنت. ماذا سيرى المخترقون؟ إذا كنت تخزن كلمات المرور كنص عادي، فهذه كارثة. إذا كنت تستخدم md5 القديم، فهذا نفس الشيء تقريبًا. أما إذا كنت تستخدم التجزئة الآمنة مع الملح (secure hash and salt)، فسيرى المخترقون مجرد مجموعة لا معنى لها من الرموز. في عام 2025، هذا ليس مجرد توصية، بل هو معيار أمان.

\n\n

في هذه المقالة، سنشرح كيفية تجزئة كلمات المرور بشكل صحيح في PHP باستخدام الخوارزميات الحديثة والملح وأفضل الممارسات. ستتعرف على سبب خطورة الطرق القديمة، وكيفية الانتقال إلى تخزين آمن لكلمات المرور في 10 دقائق.

\n\n

لماذا md5 و sha1 ضاران؟

\n\n

يرتكب العديد من المطورين المبتدئين نفس الخطأ: استخدام md5($password) أو sha1($password). في عام 2025، هذه ليست مجرد ممارسة سيئة، بل هي طريق مباشر للثغرات الأمنية. لماذا؟

\n\n
    \n
  • سرعة الحساب. تم تصميم MD5 و SHA1 للسرعة، وليس للأمان. تسمح وحدات معالجة الرسومات (GPU) الحديثة بمعالجة مليارات التجزئات في الثانية.
  • \n
  • غياب الملح. إذا اختار مستخدمان نفس كلمة المرور، ستكون تجزئاتهما متطابقة. وهذا يسمح باستخدام جداول قوس قزح (Rainbow Tables).
  • \n
  • التصادمات. تم العثور على تصادمات عملية لـ MD5 — حيث يعطي مدخلان مختلفان نفس التجزئة.
  • \n
\n\n

لحسن الحظ، في PHP هناك دوال مدمجة تحل كل هذه المشاكل. وهذا لا يتطلب تثبيت مكتبات خارجية.

\n\n

password_hash و password_verify: سلاحك السري

\n\n

منذ PHP 5.5.0، ظهرت في اللغة دالتان سحريتان: password_hash() و password_verify(). تقومان تلقائيًا بتوليد ملح، وتستخدمان خوارزميات قوية من الناحية التشفيرية، وتحميان من هجمات التوقيت.

\n\n

مثال على الاستخدام البسيط:

\n\n
// تجزئة كلمة المرور\n$password = "MySuperSecureP@ssw0rd!";\n$hash = password_hash($password, PASSWORD_DEFAULT);\necho $hash; // $2y$10$...\n
\n\n

ماذا حدث هنا؟ الدالة password_hash:

\n
    \n
  • قامت بتوليد ملح عشوائي
  • \n
  • اختارت الخوارزمية المثلى (bcrypt افتراضيًا)
  • \n
  • حسبت التجزئة
  • \n
  • أرجعت سلسلة نصية تحتوي على التجزئة والملح ومعلومات عن الخوارزمية
  • \n
\n\n

التحقق من كلمة المرور بنفس السهولة:

\n\n
// التحقق من كلمة المرور\n$inputPassword = "MySuperSecureP@ssw0rd!";\nif (password_verify($inputPassword, $hash)) {\n    echo "كلمة المرور صحيحة!";\n} else {\n    echo "كلمة المرور خاطئة.";\n}\n
\n\n

لاحظ: لا تحتاج إلى تخزين الملح بشكل منفصل. إنه مدمج بالفعل في التجزئة. هذا هو التجزئة الآمنة مع الملح (secure hash and salt) عمليًا.

\n\n

ما هي الخوارزمية التي يجب اختيارها في عام 2025؟

\n\n

افتراضيًا، تستخدم password_hash خوارزمية bcrypt. هذا اختيار ممتاز لمعظم المشاريع. لكن لدينا خيارات أخرى:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
الخوارزميةالثابتالتوصية
BcryptPASSWORD_BCRYPTاختيار ممتاز، مدعوم في كل مكان
Argon2iPASSWORD_ARGON2Iمقاوم لهجمات القنوات الجانبية
Argon2idPASSWORD_ARGON2IDأفضل اختيار في عام 2025
\n\n

Argon2id هو الفائز في مسابقة PHC (مسابقة تجزئة كلمات المرور). إنه مقاوم لكل من هجمات GPU وهجمات التوقيت. إذا كان PHP الخاص بك مبنيًا بدعم Argon2 (وهو معيار في PHP 8.x)، فاستخدمه.

\n\n

ضبط تكلفة التجزئة

\n\n

إحدى الأفكار الرئيسية لـ التجزئة الآمنة مع الملح (secure hash and salt) هي جعل عملية الحساب بطيئة بما يكفي لإعاقة المهاجمين، ولكن ليس بطيئة جدًا بحيث تؤثر على تجربة المستخدم. يمكنك التحكم في ذلك باستخدام معامل cost (لـ bcrypt) أو memory_cost و time_cost (لـ Argon2).

\n\n

مثال مع bcrypt:

\n\n
// ضبط التكلفة\n$options = [\n    'cost' => 12, // القيمة الافتراضية هي 10، يمكنك زيادتها\n];\n$hash = password_hash($password, PASSWORD_BCRYPT, $options);\n
\n\n

ومثال مع Argon2id:

\n\n
// ضبط معاملات Argon2id\n$options = [\n    'memory_cost' => 1<<17, // 128 ميجابايت\n    'time_cost'   => 4,     // 4 تمريرات\n    'threads'     => 2,     // خيطان\n];\n$hash = password_hash($password, PASSWORD_ARGON2ID, $options);\n
\n\n

تذكر: كلما زادت التكلفة، زاد الأمان، ولكن أيضًا زاد وقت المعالجة. اختبر على الخادم الخاص بك للعثور على التوازن الأمثل.

\n\n

الخاتمة: الأمان ليس خيارًا، بل ضرورة

\n\n

في عام 2025، أصبح أمان كلمات المرور أكثر أهمية من أي وقت مضى. باستخدام الدوال المدمجة في PHP مثل password_hash و password_verify مع خوارزميات حديثة مثل bcrypt أو Argon2id، يمكنك حماية مستخدميك وبياناتهم بسهولة. لا تنتظر حتى يحدث الاختراق — ابدأ بتطبيق أفضل الممارسات اليوم.

\n\n

ابدأ الآن: راجع مشروعك، واستبدل أي استخدام لـ md5 أو sha1، وطبق التجزئة الآمنة مع الملح. مستخدموك سيشكرونك!

المدونات

توصيات الكتب