تقوم الدالة crypt() بإرجاع سلسلة مشفرة باستخدام خوارزمية DES أو Blowfish أو MD5.
تعمل هذه الوظيفة بشكل مختلف على أنظمة التشغيل المختلفة، وتدعم بعض أنظمة التشغيل أكثر من نوع خوارزمية واحد. في وقت التثبيت، تقوم PHP بالتحقق من الخوارزميات المتاحة والخوارزميات المستخدمة.
تعتمد الخوارزمية الدقيقة على تنسيق وطول وسيطة الملح. يمكن أن يجعل الملح التشفير أكثر أمانًا عن طريق زيادة عدد السلاسل التي تم إنشاؤها من سلسلة معينة باستخدام طريقة تشفير محددة.
فيما يلي بعض الثوابت التي يمكن استخدامها مع الدالة crypt(). يتم تعيين هذه القيم الثابتة بواسطة PHP أثناء التثبيت.
ثابت:
[CRYPT_SALT_LENGTH] - طول التشفير الافتراضي. استخدم تشفير DES القياسي، الطول 2
[CRYPT_STD_DES] - تشفير قياسي قائم على DES مع ملح مكون من حرفين من الأبجدية "./0-9A-Za-z". سيؤدي استخدام أحرف غير صالحة في الملح إلى فشل الوظيفة.
[CRYPT_EXT_DES] - تشفير موسع قائم على DES مع ملح مكون من 9 أحرف يتكون من شرطة سفلية، متبوعًا برقم تكرار 4 بايت وملح 4 بايت. ويتم ترميزها كأحرف قابلة للطباعة، 6 بتات لكل حرف، والحرف الأقل أهمية أولاً. يتم ترميز القيم من 0 إلى 63 بالصيغة "./0-9A-Za-z". سيؤدي استخدام أحرف غير صالحة في الملح إلى فشل الوظيفة.
[CRYPT_MD5] - تشفير MD5 بملح مكون من 12 حرفًا يبدأ بـ $1$.
[CRYPT_BLOWFISH] - يحتوي تشفير Blowfish على ملح يبدأ بـ $2a$ أو $2x$ أو $2y$، ومعلمة تكلفة مكونة من رقمين "$"، ومن الحروف الأبجدية "./0-9A-Za-z" 22 حرفًا في . سيؤدي استخدام أحرف خارج الأبجدية إلى قيام الدالة بإرجاع سلسلة ذات طول صفري. المعلمة "$" هي اللوغاريتم الأساسي 2 لعدد تكرارات خوارزمية تجزئة السمكة المنتفخة ويجب أن تكون في النطاق 04-31. القيم خارج هذا النطاق ستؤدي إلى فشل الوظيفة.
[CRYPT_SHA_256] - يحتوي تشفير SHA-256 على ملح مكون من 16 حرفًا، بدءًا من 5$. إذا كانت سلسلة الملح تبدأ بـ "rounds=<N>$"، فسيتم استخدام القيمة الرقمية لـ N لتمثيل عدد مرات تنفيذ جولة التجزئة، على غرار معلمة التكلفة في Blowfish. العدد الافتراضي للحلقات هو 5000، والحد الأدنى للقيمة هو 1000، والحد الأقصى للقيمة هو 999,999,999. سيتم تحويل أي قيمة N خارج هذا النطاق إلى أقرب قيمة حدودية.
[CRYPT_SHA_512] - تشفير SHA-512 بملح مكون من 16 حرفًا، يبدأ بـ 6$. إذا كانت سلسلة الملح تبدأ بـ "rounds=<N>$"، فسيتم استخدام القيمة الرقمية لـ N لتمثيل عدد مرات تنفيذ جولة التجزئة، على غرار معلمة التكلفة في Blowfish. العدد الافتراضي للحلقات هو 5000، والحد الأدنى للقيمة هو 1000، والحد الأقصى للقيمة هو 999,999,999. سيتم تحويل أي قيمة N خارج هذا النطاق إلى أقرب قيمة حدودية.
في الأنظمة التي تدعم فيها هذه الوظيفة خوارزميات متعددة، يتم تعيين الثوابت المذكورة أعلاه على "1" إذا كانت مدعومة و"0" بخلاف ذلك.
ملاحظة: لا توجد وظيفة فك التشفير المقابلة. تستخدم الدالة crypt() خوارزمية أحادية الاتجاه.
سرداب ( شارع، ملح )
المعلمة | يصف |
---|---|
شارع | مطلوب. يحدد السلسلة المراد ترميزها. |
ملح | خياري. سلسلة تُستخدم لزيادة عدد الأحرف التي يتم تشفيرها لجعل التشفير أكثر أمانًا. إذا لم يتم توفير وسيطة salt، فسيتم إنشاء واحدة عشوائيًا في كل مرة يتم فيها استدعاء الدالة. |
قيمة الإرجاع: | تقوم بإرجاع سلسلة مشفرة، أو في حالة الفشل سلسلة مكونة من أقل من 13 حرفًا والتي نضمن أنها مختلفة عن الملح. |
---|---|
نسخة PHP: | 4+ |
سجل التحديث: | في PHP 5.3.7، تمت إضافة أوضاع السمكة المنتفخة $2x$ و$2y$ للتعامل مع الهجمات المحتملة عالية المستوى. في PHP 5.3.2، تمت إضافة الثوابت الجديدة SHA-256 وSHA-512. اعتبارًا من PHP 5.3.2، ستعيد Blowfish سلسلة "الفشل" ("*0" أو "*1") في حلقات غير صالحة بدلاً من الرجوع إلى DES. منذ PHP 5.3.0، PHP يأتي مع تنفيذ تشفير MD5، وتنفيذ DES القياسي، وتنفيذ DES الموسع وخوارزمية السمكة المنتفخة. إذا كان النظام لا يدعم الخوارزمية المذكورة أعلاه، فسيتم استخدام خوارزمية PHP الخاصة. |
استخدم htpasswd لتشفير crypt():
<?php // تعيين كلمة المرور $password = ' mypassword ' ; // احصل على قيمة التجزئة، واستخدم قيمة الملح التلقائية $hash = crypt ( $password ) ? >في هذا المثال، نستخدم أنواع تجزئة مختلفة:
<?php لو ( CRYPT_STD_DES == 1 ) { صدى ' DES القياسي : ' . crypt ( ' rasmuslerdorf ' , ' rl ' ) ; لو ( CRYPT_EXT_DES == 1 ) { صدى ' DES ممتد : ' . crypt ( ' rasmuslerdorf ' , ' _J9..rasm ' ) . لو ( CRYPT_MD5 == 1 ) { صدى ' MD5 : ' سرداب ( ' rasmuslerdorf ' , ' $ 1 $ rasmusle $ ' ) ; لو ( CRYPT_BLOWFISH == 1 ) { صدى ' السمكة المنتفخة : ' . crypt ( ' rasmuslerdorf ' , ' $ 2a $ 07 $usesomesillystringforsalt $ ' ) ; لو ( CRYPT_SHA256 == 1 ) { صدى ' SHA-256: ' crypt ( ' rasmuslerdorf ' , ' $ 5 $ rounds = 5000 $usesomesillystringforsalt$ ' ) ; لو ( CRYPT_SHA512 == 1 ) { صدى ' SHA-512: ' crypt ( ' rasmuslerdorf ' , ' $ 6 $ rounds = 5000 $usesomesillystringforsalt$ ' ) ; ?>يُخرج الكود أعلاه ما يلي (حسب نظام التشغيل):
DES القياسي: rl.3StKT.4T8ME DES الممتد: _J9..rasmBYk8r9AiWNcMD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hiSHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21