توصيات الدورة:

دالة crypt() في PHP

تعريف واستخدام

تقوم دالة crypt() بتحويل النصوص إلى نصوص مشفرة باستخدام خوارزميات DES، Blowfish أو MD5.

يختلف السلوك الخاص بالدالة على أنظمة التشغيل المختلفة، حيث يدعم بعض الأنظمة أنواع خوارزمية أكثر من واحدة. يتم التحقق من خوارزمية المتاحة واستخدامها عند التثبيت بواسطة PHP.

هناك بعض النصوص الثابتة التي تستخدمها دالة crypt(). هذه القيم الثابتة يتم تعيينها عند التثبيت بواسطة PHP.

النصوص الثابتة:

[CRYPT_SALT_LENGTH] طول التشفير الافتراضي. يستخدم التشفير القياسي DES، الطول 2 بت.
[CRYPT_STD_DES] التباين المبني على خوارزمية DES القياسية يستخدم زوجين من الحروف من حروف "./0-9A-Za-z" كقيمة الملح. استخدام حروف غير قانونية في الملح يؤدي إلى فشل crypt().
[CRYPT_EXT_DES] التباين المبني على خوارزمية DES. قيمة الملح هي سلسلة من 9 حروف، تتكون من خط تحتوي على 4 بت مرات التكرار و4 بت قيمة الملح. يتم ترميزها إلى حروف قابلة للطباعة، كل حرف من 6 أرقام، حيث يتم إعطاء الأسبقية للأرقام الفعالة الأقل. من 0 إلى 63 يتم ترميزها إلى "./0-9A-Za-z". استخدام حروف غير قانونية في الملح يؤدي إلى فشل crypt().
[CRYPT_MD5] يستخدم الاشتباك MD5 مفتاح سحابة مكون من 12 حرفًا يبدأ بـ $1$.
[CRYPT_BLOWFISH] يستخدم خوارزمية Blowfish مفتاح سحابة يشبه "$2a$"، معامل تكلفة من اثنين من الأرقام، "$"، ونص مكون من 64 حرفًا يتم جمعه من الأحرف في نطاق "./0-9A-Za-z". إذا تم استخدام حرف خارج هذا النطاق في مفتاح السحابة، فإن crypt() سيعود بنتيجة نص فارغ. معامل تكلفة من اثنين من الأرقام هو أس logarithم قيمة عدد مرات التنفيذ، يتراوح بين 04-31، وإذا تجاوزت هذا النطاق فإن crypt() سيفشل.
CRYPT_SHA256 يستخدم خوارزمية SHA-256 مفتاح سحابة مكون من 16 حرفًا يبدأ بـ $5$ للاشتباك. إذا بدأت قيمة مفتاح السحابة بـ "rounds=<N>$"، فإن قيمة الرقم N ستُستخدم لتعيين عدد مرات تنفيذ عملية الاشتباك، مما يشبه معامل تكلفة خوارزمية Blowfish. يُعد عدد مرات التنفيذ الافتراضي 5000، أقل من ذلك هو 1000، وأكبر هو 999,999,999. سيتم تحويل القيم التي تُتجاوز هذا النطاق إلى القيمة الأقرب.
CRYPT_SHA512 يستخدم خوارزمية SHA-512 مفتاح سحابة مكون من 16 حرفًا يبدأ بـ $6$ للاشتباك. إذا بدأت قيمة مفتاح السحابة بـ "rounds=<N>$"، فإن قيمة الرقم N ستُستخدم لتعيين عدد مرات تنفيذ عملية الاشتباك، مما يشبه معامل تكلفة خوارزمية Blowfish. يُعد عدد مرات التنفيذ الافتراضي 5000، أقل من ذلك هو 1000، وأكبر هو 999,999,999. سيتم تحويل القيم التي تُتجاوز هذا النطاق إلى القيمة الأقرب.

في الأنظمة التي تدعم عدة خوارزميات، إذا تم تعيين القيم المحددة أعلاه، يتم تعيينها على "1"، وإلا يتم تعيينها على "0".

التعليقات:لا يوجد دالة التشفير العكسي相应的. يستخدم دالة crypt() خوارزمية أحادية الاتجاه.

النحو

crypt(النص,مفتاح السحابة)
الم参数 الوصف
النص مطلوب. يحدد النص الذي سيتم تشفيره.
مفتاح السحابة اختياري. يُستخدم النص المُضيف لزيادة عدد الأحرف المُشفرة لجعل التشفير أكثر أمانًا. إذا لم يُقدم مفتاح السحابة، فإن PHP سيقوم بإنشاء مفتاح سحابة عشوائي في كل مرة يتم فيها استدعاء الدالة.

تفاصيل تقنية

القيمة المُرجعة: يُرجع النص المشفرة أو نص قصير أقل من 13 حرفًا، مما يضمن التمييز بينه وبين مفتاح السحابة في حالة الفشل.
إصدار PHP: 4+

سجل التحديثات

إصدار شرح
5.3.2 تم إضافة crypt بناءً على تنفيذ Ulrich Drepper، بما في ذلك خوارزميات SHA-256 و SHA-512.
5.3.2 تم تصحيح مشكلة Blowfish بسبب دورة غير قانونية، حيث يتم إرجاع نص "فشل" ("*0" أو "*1") بدلاً من التبديل إلى خوارزمية DES.
5.3.0 يحتوي PHP الآن على تنفيذه الخاص للـ MD5 Crypt، بما في ذلك خوارزمية DES القياسية، خوارزمية DES الموسعة، وخوارزمية Blowfish. إذا كان النظام يفتقر إلى التنفيذ المناسب، فإن PHP سيستخدم تنفيذه الخاص.

مثال

مثال 1

في هذا المثال، سنقوم باختبار خوارزميات مختلفة:

<?php
// salt 2 حرف
if (CRYPT_STD_DES == 1)
{
echo ".Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo ".Standard DES غير مدعوم.\n<br>";
}
// salt 4 حرف
if (CRYPT_EXT_DES == 1)
{
echo ".Extended DES: ".crypt('something','_S4..some')."\n<br>";
}
else
{
echo ".Extended DES غير مدعوم.\n<br>";
}
// يبدأ بـ $1$ 12 حرف
if (CRYPT_MD5 == 1)
{
echo ".MD5: ".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo ".MD5 غير مدعوم.\n<br>";
}
// Salt يبدأ بـ $2a$. معامل تكلفة بيانين: 09. 22 حرف
if (CRYPT_BLOWFISH == 1)
{
echo ".Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo ".Blowfish DES غير مدعوم.\n<br>";
}
// 以 $5$ 开始的 16 字符 salt。周长的默认数是 5000。
if (CRYPT_SHA256 == 1)
{
echo ".SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>";
else
{
echo "SHA-256 not supported.\n<br>";
}
// 以 $5$ 开始的 16 字符 salt。周长的默认数是 5000。
if (CRYPT_SHA512 == 1)
{
echo "SHA-512: ".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>

上面的代码的输出(取决于操作系统):

Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.