PHP crypt() 函数
定义和用法
crypt() 函数返回使用 DES、Blowfish 或 MD5 算法加密的字符串。
在不同的操作系统上,该函数的行为不同,某些操作系统支持一种以上的算法类型。在安装时,PHP 会检查什么算法可用以及使用什么算法。
具体的算法依赖于 salt 参数的格式和长度。通过增加由使用特定加密方法的特定字符串所生成的字符串数量,salt 可以使加密更安全。
这里有一些和 crypt() 函数一起使用的常量。这些常量值是在安装时由 PHP 设置的。
常量:
[CRYPT_SALT_LENGTH] | 默认的加密长度。使用标准的 DES 加密,长度为 2 |
[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 از یک رشته 12 حرفی با شروع $1$ استفاده میکند. |
[CRYPT_BLOWFISH] | الگوریتم Blowfish از نمک زیر استفاده میکند: "$2a$"، یک پارامتر cost دو رقمی، "$" و یک رشته 64 حرفی که از کاراکترهای "./0-9A-Za-z" ترکیب شدهاند. استفاده از کاراکترهای خارج از این محدوده در نمک باعث میشود که crypt() یک رشته خالی بازگرداند. پارامتر cost دو رقمی، محاسبه تعداد دفعات تکرار با استفاده از توان 2 است و محدوده آن 04-31 است. خارج شدن از این محدوده باعث شکست crypt() میشود. |
CRYPT_SHA256 | الگوریتم SHA-256 از یک رشته 16 حرفی با شروع $5$ برای هش استفاده میکند. اگر رشته نمک با "rounds=<N>$" شروع شود، مقدار عددی N برای تعیین تعداد دفعات تکرار هش استفاده میشود، که شبیه به پارامتر cost در الگوریتم Blowfish است. تعداد دفعات پیشفرض 5000 است، کمترین تعداد 1000 و بیشترین تعداد 999,999,999. مقدارهای N خارج از این محدوده به مقدار نزدیکتر تبدیل میشوند. |
CRYPT_SHA512 | الگوریتم SHA-512 از یک رشته 16 حرفی با شروع $6$ برای هش استفاده میکند. اگر رشته نمک با "rounds=<N>$" شروع شود، مقدار عددی N برای تعیین تعداد دفعات تکرار هش استفاده میشود، که شبیه به پارامتر cost در الگوریتم Blowfish است. تعداد دفعات پیشفرض 5000 است، کمترین تعداد 1000 و بیشترین تعداد 999,999,999. مقدارهای N خارج از این محدوده به مقدار نزدیکتر تبدیل میشوند. |
در سیستمهایی که از چندین الگوریتم پشتیبانی میکنند، اگر از این متغیرهای ثابت پشتیبانی میشود، آنها را به "1" تنظیم کنید، در غیر این صورت به "0".
نکات:هیچ تابع رمزگشایی مرتبطی وجود ندارد. تابع crypt() از یک الگوریتم یکطرفه استفاده میکند.
نحوه استفاده
crypt(رشته,نمک)
پارامترها | توضیحات |
---|---|
رشته | ضروری. تعیین رشتهای که باید کد شود. |
نمک | اختیاری. برای افزایش تعداد کاراکترهای کد شده استفاده میشود تا امنیت کد بهبود یابد. اگر پارامتر نمک ارائه نشود، پاییپ هاف در هر بار فراخوانی این تابع یک نمک تصادفی ایجاد میکند. |
جزئیات فنی
مقدار بازگشتی: | یک رشته رمزنگاری شده یا یک رشته کمتر از 13 حرف، که در صورت شکست با نمک قابل تشخیص باشد. |
نسخه پاییپ هاف | 4+ |
日志 داخلی
Wurin | Bayanai |
---|---|
5.3.2 | Daga lafiyar Ulrich Drepper, sabon crypt na SHA-256 da SHA-512. |
5.3.2 | Dabara ya kammala matsakaici na Blowfish saboda saukar hanyar da ya kai 'yanci' mai suna 'fai' ("*0" ko "*1") kuma ba za a yi amfani da DES a cikin hanyar. |
5.3.0 | PHP yanzu ya kan amfani da kuma yana da sha'awar MD5 Crypt, ciki har da sabon DES, DES na yadda ake yanke shirin kuma Blowfish. Idan systema ba ta da kwarewa na hanyar, PHP za a samun shirin kuma za a amfani da shi. |
Matafi
Tarihin 1
a cikakar da ake samun shirin don tuwassasshe hanyar:
<?php // 两字符 salt if (CRYPT_STD_DES == 1) { echo "Standard DES: ".crypt('something','st')."\n<br>"; } else { echo "Standard DES not supported.\n<br>"; } // 4 字符 salt if (CRYPT_EXT_DES == 1) { echo "Extended DES: ".crypt('something','_S4..some')."\n<br>"; } else { echo "Extended DES not supported.\n<br>"; } //以 $1$ 开始的 12 字符 if (CRYPT_MD5 == 1) { echo "MD5: ".crypt('something','$1$somethin$')."\n<br>"; } else { echo "MD5 not supported.\n<br>"; } // 以 $2a$ 开始的 Salt。双数字的 cost 参数:09. 22 字符 if (CRYPT_BLOWFISH == 1) { echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>"; } else { echo "Blowfish DES not supported.\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.