crypt
تابع crypt برای هش کردن (Hash) رشته هاست. هش یعنی تبدیل یک متن به اثر انگشتِ یک طرفه. برای پسوردها مفید است؛ اما بدون سالت (Salt) ضعیف می شود.
تعریف و کاربرد crypt
تابع crypt() یک رشته هش شده می دهد. الگوریتم بر اساس سیستم و نوع سالت متفاوت است؛ مانند DES، Blowfish، MD5، SHA-256 و SHA-512.
سینتکس
<?php
crypt($str, $salt);
?>
هش کردن با crypt (نمونه های عملی)
1) DES استاندارد با سالت دوحرفی
این روش قدیمی است. فقط برای فهم موضوع ببین؛ برای امنیت قوی نیست.
<?php
$password = "mySecret";
$salt = "st";
$hash = crypt($password, $salt);
echo $hash;
?>
2) Blowfish با هزینه محاسباتی (cost)
سالت باید با $2a$ یا $2y$ شروع شود. عدد هزینه دو رقمی است.
<?php
$password = "mySecret";
$salt = "$2a$09$anexamplestringforsalt$";
$hash = crypt($password, $salt);
echo $hash;
?>
3) SHA-256 با تعداد دورهای دلخواه
برای SHA-256، سالت با $5$ شروع می شود و می تواند rounds داشته باشد.
<?php
$password = "mySecret";
$salt = "$5$rounds=5000$anexamplestringforsalt$";
$hash = crypt($password, $salt);
echo $hash;
?>
4) بررسی پشتیبانی الگوریتم ها
روی بعضی سیستم ها همه الگوریتم ها فعال نیستند. این گونه چک کن:
<?php
if (CRYPT_BLOWFISH == 1) {
echo "Blowfish supported." . "\n";
} else {
echo "Blowfish not supported." . "\n";
}
if (CRYPT_SHA512 == 1) {
echo "SHA-512 supported." . "\n";
} else {
echo "SHA-512 not supported." . "\n";
}
?>
گام های عملی
- رشته پسورد را تعیین کن.
- بر اساس الگوریتم، سالت درست بساز.
- تابع
cryptرا اجرا کن و خروجی را ذخیره کن.
نکات و هشدارها
نکته: بدون سالت، خروجی ضعیف می شود؛ حتماً سالت مناسب بده.
نکته: مقداردهی سالت قالب مشخص دارد؛ مثلاً $2y$ یا $5$.
هشدار: crypt یک طرفه است؛ decrypt وجود ندارد.
هشدار: برخی کاراکترهای نامعتبر در سالت باعث شکست تابع می شوند.
برای مرور، از صفحه هش کردن با crypt استفاده کن. همچنین مقایسه ساده با MD5 و نمونه چک سام crc32 را ببین.
جمع بندی سریع
- crypt هش یک طرفه برمی گرداند.
- بدون سالت امن نیست.
- فرمت سالت، الگوریتم را تعیین می کند.
- پشتیبانی الگوریتم ها وابسته به سیستم است.