يتم استخدام الدالةpassword_hash() لإنشاء تجزئة لكلمة المرور.
متطلبات إصدار PHP: PHP 5 >= 5.5.0، PHP 7
سلسلةpassword_hash (سلسلة $password، int $algo [، array $options ])
يقوم التابع ()password_hash بإنشاء تجزئة لكلمة المرور باستخدام خوارزمية تجزئة أحادية الاتجاه قوية بما فيه الكفاية. ()password_hash متوافق مع crypt(). لذلك، يمكن أيضًا استخدام تجزئات كلمة المرور التي تم إنشاؤها بواسطة crypt() معpassword_hash().
الخوارزميات المدعومة حاليًا:
PASSWORD_DEFAULT
- استخدم خوارزمية bcrypt (الافتراضية في PHP 5.5.0). لاحظ أن هذا الثابت سيتغير مع إضافة PHP لخوارزميات أحدث وأكثر قوة. ولذلك، فإن طول النتائج الناتجة باستخدام هذا الثابت سوف يتغير في المستقبل. لذلك، يمكن أن يتجاوز العمود الموجود في قاعدة البيانات حيث يتم تخزين النتائج 60 حرفًا (يفضل 255 حرفًا).
PASSWORD_BCRYPT
- ينشئ تجزئة باستخدام خوارزمية CRYPT_BLOWFISH
. ينتج عن هذا crypt() متوافق مع "$2y$". ستكون النتيجة سلسلة مكونة من 60 حرفًا، أو FALSE
في حالة الفشل.
PASSWORD_ARGON2I
- ينشئ تجزئة باستخدام خوارزمية التجزئة Argon2.
الخيارات التي يدعمها PASSWORD_BCRYPT:
salt(string) - قم بتوفير قيمة الملح يدويًا لتجزئة كلمة المرور. سيؤدي هذا إلى تجنب توليد الملح تلقائيًا.
عند حذف هذه القيمة، يقوم التابعpassword_hash() تلقائيًا بإنشاء قيمة عشوائية لكل تجزئة لكلمة المرور. طريقة العمل هذه مقصودة.
ملاحظة: تم إهمال خيار الملح بدءًا من PHP 7.0.0. في الوقت الحالي، من الأفضل استخدام الملح الافتراضي الذي تم إنشاؤه ببساطة.
التكلفة (عدد صحيح) - تمثل التكلفة التي تستخدمها الخوارزمية. توجد أمثلة لقيم التكلفة في صفحة crypt().
عند الحذف، تكون القيمة الافتراضية هي 10. تعتبر هذه التكلفة نتيجة جيدة، ولكن قد تتمكن من زيادة هذه القيمة بناءً على أجهزتك الخاصة.
PASSWORD_ARGON2الخيارات المدعومة:
Memory_cost ( عدد صحيح ) - الحد الأقصى للذاكرة (الوحدة: بايت) عند حساب تجزئة Argon2. القيمة الافتراضية: PASSWORD_ARGON2_DEFAULT_MEMORY_COST
.
time_cost ( عدد صحيح ) - الحد الأقصى للوقت المستغرق في حساب تجزئة Argon2. القيمة الافتراضية: PASSWORD_ARGON2_DEFAULT_TIME_COST
.
المواضيع ( عدد صحيح ) – الحد الأقصى لعدد المواضيع المستخدمة عند حساب تجزئة Argon2. القيمة الافتراضية: PASSWORD_ARGON2_DEFAULT_THREADS
.
وصف المعلمة:
كلمة المرور: قيمة تجزئة تم إنشاؤها بواسطة كلمة المرور_hash().
algo: ثابت خوارزمية تشفير يُستخدم للإشارة إلى الخوارزمية المستخدمة عند تجزئة كلمات المرور.
الخيارات: مصفوفة ترابطية تحتوي على خيارات. حاليًا، يتم دعم خيارين: الملح، والملح (سلسلة التداخل) المضافة عند تجزئة كلمة المرور، والتكلفة، والتي تُستخدم لتحديد عدد مستويات تكرار الخوارزمية. يمكن العثور على أمثلة لهاتين القيمتين في صفحة crypt().
عند حذفها، سيتم استخدام قيمة الملح العشوائية والتكلفة الافتراضية.
إرجاع كلمة المرور المجزأة، أو FALSE في حالة الفشل.
الإخراج هو:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
الإخراج هو:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
مثال على ضبط قيمة الملح يدويا
<?php /* * * لاحظ أن قيمة الملح هنا يتم إنشاؤها بشكل عشوائي. * لا تستخدم أبدًا قيمة ملح ثابتة، أو قيمة ملح لا يتم توليدها بشكل عشوائي. * * في معظم الحالات، يمكنك السماح لـpassword_hash بإنشاء قيمة ملح عشوائية لك تلقائيًا */ خيارات $ = [ ' التكلفة ' => 11 , ' الملح ' = > mcrypt_create_iv ( 22 , MCRYPT_DEV_URANDOM ) , ] ; password_hash ( " rasmuslerdorf " , PASSWORD_BCRYPT , $options ) ? >الإخراج هو:
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
مثال على كلمة المرور_hash() للعثور على أفضل تكلفة
<?php /* * * يُجري هذا المثال اختبارًا مرجعيًا على الخادم لاختبار مدى ارتفاع التكلفة التي يمكن أن يتحملها الخادم * يمكن تعيين أعلى قيمة دون إبطاء الخادم بشكل كبير * 8-10 هي النتيجة النهائية الجيدة، في الخادم إذا إنه سريع بما فيه الكفاية، وكلما ارتفع كلما كان ذلك أفضل. * هدف الكود التالي هو ≥ 50 مللي ثانية (ملي ثانية)، * مناسب للنظام للتعامل مع تسجيل الدخول التفاعلي. */ $timeTarget = 0.05 ؛ // 50 مللي ثانية (ملي ثانية) تكلفة $ = 8 ؛ { $ cost ++ ; $ start = microtime ( true ) ؛ $ end = microtime ( true ) ;بينما ( ( $end - $start ) < $ timeTarget ) ; " تم العثور على التكلفة المناسبة: " $ cost ? >الإخراج هو:
التكلفة المناسبة التي تم العثور عليها: 10
مثال باستخدام Argon2:
<?php صدى ' تجزئة Argon2 : ' .password_hash ( ' rasmuslerdorf ' ، PASSWORD_ARGON2I ) ? >الإخراج هو:
تجزئة Argon2: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0