English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يستخدم دالة crypt() لتحويل النصوص إلى تعريفات غير مزدوجة
string crypt ( string $str [, string $salt ] )
يعيد crypt() نص توقيع يستند إلى خوارزمية DES القياسية لـ UNIX أو خوارزمية بديلة متاحة في النظام.
مفصل salt هو اختياري. ومع ذلك، إذا لم يكن هناك salt، فإن crypt() سيقوم بإنشاء كلمة مرور ضعيفة. سيقوم إصدار php 5.6 وما بعدها بإطلاق خطأ مستوى E_NOTICE إذا لم يتم تقديمها. من أجل الأمان الأفضل، تأكد من تحديد salt قوي.
استخدم password_hash() خوارزمية تشفير قوية لإنشاء salt قوي، وسيقوم تلقائيًا بالدورات المناسبة. password_hash() هي تعبئة بسيطة لـ crypt() وتوافق تمامًا مع تشفير الرقم السري الحالي. يُنصح باستخدام password_hash().
بعض الأنظمة تدعم أكثر من نوع واحد من خوارزميات الخصائص. في الواقع، في بعض الأحيان، يتم استخدام خوارزمية MD5 بدلاً من خوارزمية DES القياسية. يتم تفعيل هذا النوع من الخوارزميات عن طريق متغير salt. قبل الإصدار 5.3، كان PHP يقرر خوارزميات المتاحة بناءً على crypt() في نظام التشغيل عند التثبيت. إذا لم يتم تقديم salt، فإن PHP سيقوم تلقائيًا بإنشاء salt طويل بـ 2 حرف (DES) أو 12 حرف (MD5) بناءً على توفر MD5 crypt(). تم تعريف ثابت CRYPT_SALT_LENGTH ليعبر عن أطول salt المسموح به لكل خوارزمية.
crypt() يعيد على أساس خوارزمية DES القياسية في بداية المحتوى الناتج رمزين كـ salt. إنه يستخدم فقط الأثنا عشر حرفًا الأول من str، لذا فإن الأطوال الأكبر التي تبدأ بـ 8 حروف متماثلة أيضًا ستنتج نفس النتيجة (عند استخدام salt نفسه).
في أنظمة الدعم لمتعدد خوارزميات crypt()، يتم تعيين القيم التالية بناءً على توفر النوع المطلوب كـ 0 أو 1:
CRYPT_STD_DES - 基于标准 DES 算法的散列使用 "./0-9A-Za-z" 字符中的两个字符作为盐值。在盐值中使用非法的字符将导致 crypt() 失败。
CRYPT_EXT_DES - 扩展的基于 DES 算法的散列。其盐值为 9 个字符的字符串,由 1 个下划线后面跟着 4 字节循环次数和 4 字节盐值组成。它们被编码成可打印字符,每个字符 6 位,有效位最少的优先。0 到 63 被编码为 "./0-9A-Za-z"。在盐值中使用非法的字符将导致 crypt() 失败。
CRYPT_MD5 - MD5 散列使用一个以 $1$ 开始的 12 字符的字符串盐值。
CRYPT_BLOWFISH - يستخدم خوارزمية Blowfish ملحًا كما يلي: "$2a$"، معامل تكلفة من سطرين، "$"، وستة وأربعين سطرًا مكونة من مجموعة "./0-9A-Za-z". إذا تم استخدام رمز خارج هذا النطاق في الملح، فإن crypt() سيعيد نصًا فارغًا. معامل تكلفة من سطرين هي حساب دورات التعويض بأساس 2، وهو في نطاق 04-31. إذا كان خارج هذا النطاق، فإن crypt() سيفشل. قبل PHP 5.3.7، كان يتم دعم "$2a$" كمدخل الملح الأولي فقط، تم إدخال مدخلات جديدة في PHP 5.3.7 لتحسين أمان تنفيذ Blowfish. يمكن الرجوع إلى هذا المستند لمعرفة المزيد عن هذا الإصلاح. على أي حال، يجب على المطورين الذين يعملون على إصدارات PHP 5.3.7 وما بعدها استخدام "$2y$" بدلاً من "$2a$"
CRYPT_SHA256 - يستخدم خوارزمية SHA-256 سلسلة 16 حرف تبدأ بـ $5$ كملح. إذا بدأت سلسلة الملح بـ "rounds=<N>$"، فإن قيمة الرقم N ستستخدم لتعيين عدد دورات التعويض، مما يشبه معامل تكلفة خوارزمية Blowfish. المعدل الافتراضي هو 5000، أقله هو 1000، وأكبره هو 999,999,999. سيتم تحويل N خارج هذا النطاق إلى القيمة الأقرب.
CRYPT_SHA512 - يستخدم خوارزمية SHA-512 سلسلة 16 حرف تبدأ بـ $6$ كملح. إذا بدأت سلسلة الملح بـ "rounds=<N>$"، فإن قيمة الرقم N ستستخدم لتعيين عدد دورات التعويض، مما يشبه معامل تكلفة خوارزمية Blowfish. المعدل الافتراضي هو 5000، أقله هو 1000، وأكبره هو 999,999,999. سيتم تحويل N خارج هذا النطاق إلى القيمة الأقرب.
يستعيد قيمة التعويض كـ نص
رقم | المواصفات والشرح |
---|---|
1 | str السلسلة التي تريد تعويضها |
تجربة الأمثلة التالية، يعيد crypt() قيمة التعويض باستخدام ملح تلقائي:
<?php //تعيين كلمة المرور $input = 'المعلومات'; // الحصول على قيمة التعويض، باستخدام ملح تلقائي $hash = crypt($input); ?>اختبار رؤية‹/›