PHP crypt() Function














❮ مرجع رشته PHP



تعریف و استفاده


تابع crypt() یک رشته هش شده را با استفاده از الگوریتم‌های DES، Blowfish، یا MD5 برمی‌گرداند.


این عملکرد در سیستم عامل های مختلف رفتار متفاوتی دارد. PHP الگوریتم هایی را بررسی می کند
در دسترس هستند و هنگام نصب از چه الگوریتم هایی استفاده کنید.


پارامتر salt اختیاری است. با این حال، crypt() یک رمز عبور ضعیف ایجاد می کند
بدون نمک اطمینان حاصل کنید که نمک به اندازه کافی قوی برای امنیت بهتر مشخص کنید.


چند ثابت وجود دارد که همراه با تابع crypt() استفاده می شود.
مقدار این ثابت ها توسط PHP هنگام نصب تنظیم می شود.


ثابت:



  • [CRYPT_STD_DES] - هش استاندارد مبتنی بر DES با دو نویسه نمک از الفبای "./0-9A-Za-z". استفاده از نویسه‌های نامعتبر در salt باعث می‌شود که این عملکرد از کار بیفتد.

  • [CRYPT_EXT_DES] - هش مبتنی بر DES گسترده با نمک نه کاراکتری متشکل از یک خط زیر و به دنبال آن 4 بایت تعداد تکرار و 4 بایت نمک. اینها به صورت کاراکترهای قابل چاپ، 6 بیت در هر کاراکتر، ابتدا کمترین اهمیت را کدگذاری می‌کنند. مقادیر 0 تا 63 به صورت "./0-9A-Za-z" کدگذاری می شوند. استفاده از کاراکترهای نامعتبر در salt باعث می شود که عملکرد از کار بیفتد.

  • [CRYPT_MD5] - هش MD5 با نمک 12 کاراکتری که با $1$ شروع می شود

  • [CRYPT_BLOWFISH] - هش کردن Blowfish با نمکی که با $2a$، $2x$، یا $2y$ شروع می شود، یک پارامتر هزینه دو رقمی "$" و 22 کاراکتر از الفبای "./0-9A-Za -z". استفاده از کاراکترهای خارج از حروف الفبا باعث می شود که این تابع یک رشته با طول صفر را برگرداند. پارامتر "$" لگاریتم پایه 2 تعداد تکرار برای الگوریتم هش کردن زیربنایی Blowfish-Bashed است و باید در محدوده 04-31 باشد. مقادیر خارج از این محدوده باعث از کار افتادن عملکرد می شود.

  • [CRYPT_SHA_256] - هش SHA-256 با نمک 16 کاراکتری که از 5 دلار شروع می شود. اگر رشته salt با "rounds=$" شروع شود، از مقدار عددی N برای نشان دادن چند بار اجرای حلقه هش استفاده می شود، بسیار شبیه به پارامتر هزینه در Blowfish. تعداد دورهای پیش فرض 5000 است، حداقل 1000 و حداکثر 999,999,999 وجود دارد. هر انتخابی از N خارج از این محدوده به نزدیکترین حد کوتاه می شود.

  • [CRYPT_SHA_512] - هش SHA-512 با نمک 16 کاراکتری که از 6 دلار شروع می شود.
    اگر رشته salt با "rounds=$" شروع شود، از مقدار عددی N برای نشان دادن چند بار اجرای حلقه هش استفاده می شود، بسیار شبیه به پارامتر هزینه در Blowfish. تعداد دورهای پیش فرض 5000 است، حداقل 1000 و حداکثر 999,999,999 وجود دارد. هر انتخابی از N خارج از این محدوده به نزدیکترین حد کوتاه می شود.


در سیستم هایی که این تابع از چندین الگوریتم، ثابت ها پشتیبانی می کند
در بالا در صورت پشتیبانی روی "1" و در غیر این صورت "0" تنظیم شده است.


توجه: هیچ تابع رمزگشایی وجود ندارد. تابع crypt() از یک الگوریتم یک طرفه استفاده می کند.





نحو



دخمه (خیابان، نمک)


مقادیر پارامتر









را مشخص می کند





پارامتر توضیح
str لازم است. رشته ای که باید هش شود
نمک اختیاری. یک رشته نمک برای هش کردن بر اساس












جزئیات فنی















مقدار بازگشتی: رشته کدگذاری شده یا رشته ای که کوتاهتر از 13 کاراکتر است و تضمین شده است که در صورت شکست با نمک متفاوت است را برمی گرداند
نسخه PHP: 4+
تغییر: PHP 5.6.0 - اگر salt حذف شود، یک هشدار امنیتی E_NOTICE را نشان می دهد.

PHP 5.3.7 - حالت‌های Blowfish $2x$ و $2y$ اضافه شد.
PHP 5.3.2 - SHA-256 و SHA-512 اضافه شد.
رفتار Blowfish ثابت در دورهای نامعتبر، به جای بازگشت به DES، رشته "شکست" ("*0" یا "*1") را برمی گرداند.
PHP 5.3.0
- PHP اکنون شامل پیاده سازی خاص خود برای کریپت MD5، استاندارد DES است،
الگوریتم های DES و Blowfish را توسعه داده و در صورت عدم وجود سیستم از آن استفاده خواهد کرد
پشتیبانی از یک یا چند الگوریتم.




نمونه های بیشتر



مثال


در این مثال ما الگوریتم های مختلف را آزمایش خواهیم کرد:





// نمک 2 کاراکتری

اگر (CRYPT_STD_DES == 1)< br>{
echo "DES استاندارد: " .crypt('something','st'). "n
"
;

}
else
{
echo "DES استاندارد پشتیبانی نمی شود.n
"
;
}


// نمک 4 کاراکتری
اگر (CRYPT_EXT_DES == 1)
{
echo< /span> "DES توسعه یافته: ".crypt("چیزی"،'_S4..some')."n;
}
دیگر
{
echo "DES توسعه یافته پشتیبانی نمی شود.n
"
;
}

// نمک 12 کاراکتری که با $1$ شروع می شود
اگر (CRYPT_MD5 == 1)
{
پژواک "MD5: ".crypt('something' ،'$1$somethin$')."n< ;br>";

دیگر
{
echo "MD5 پشتیبانی نمی شود.n
"
;
}

// نمک با $2a$ شروع می شود. پارامتر هزینه دو رقمی: 09. 22 نویسه
اگر (CRYPT_BLOWFISH == 1)
{

echo "Blowfish: ".crypt( "چیزی"،'$2a$09$anexamplestringforsalt$' )."n
"
;

}
else
{
echo "Blowfish DES پشتیبانی نمی شود.n
"
;
}


// نمک 16 کاراکتری که از 5 دلار شروع می شود. تعداد دورهای پیش فرض 5000 است.
اگر (CRYPT_SHA256 == 1)
{
echo "SHA-256: ".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."n
"
;

دیگر
{
echo "SHA-256 پشتیبانی نمی‌شود.n
"
;
}

// نمک 16 کاراکتری که با 6 دلار شروع می شود. تعداد پیش‌فرض دورها 5000 است.

اگر (CRYPT_SHA512 == 1) < br>{
echo "SHA-512: ".crypt("چیزی",'$6$rounds=5000$anexamplestringforsalt $');

دیگر

{
echo "SHA-512 پشتیبانی نمی‌شود. ";


?>


خروجی کد بالا می تواند (بسته به سیستم عامل):

باشد


DES استاندارد: stqAdD7zlbByI
DES توسعه یافته: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestring: $2a$09$anexamplestring dfu
SHA-256: $5$rounds=5000$ anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9

SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/

oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.






❮ مرجع رشته PHP