<PHP字符串参考
定义和用法
的crypt()函数返回使用DES,Blowfish算法,或MD5算法散列字符串。
这个函数的作用在不同的操作系统不同。 PHP会检查什么算法可用,安装时使用什么算法。
盐参数是可选的。 然而, crypt()创建无盐弱密码。 确保指定足够强的盐为更好的安全性。
有迹象表明,与一起使用的一些常量crypt()函数。 这些常量的值由PHP在安装时设置。
常量:
- [CRYPT_STD_DES] -标准DES-基于散列与从字母表两个字符的盐"./0-9A-Za-z" 。 使用的盐无效字符将导致此函数失败。
- [CRYPT_EXT_DES] - 扩展基于DES的散列与由一个下划线随后的4个字节迭代计数和4个字节的盐的一个九个字符盐。 这些被编码为可打印的字符,每个字符的6位,至少显著角色首次。 0到63的值被编码为"./0-9A-Za-z" 。 使用的盐无效字符会导致功能失效。
- [CRYPT_MD5] - MD5具有12个字符的盐从1开始$ $散列
- [crypt_blowfish的] -河豚散列与盐开始$ 2A,$ 2×$,或$ $ 2Y,一个两位数成本参数"$" ,和22个字符从字母"./0-9A-Za-z" 。 使用字母之外的字符将导致此函数返回一个零长度字符串。 在"$"参数是用于底层的Blowfish-撞坏散列algorithmeter迭代计数的基数为2的对数,并且必须在范围4月31日。 超出此范围的值会导致功能失效。
- [CRYPT_SHA_256] - SHA-256散列以16字符盐起始$ 5 $。 如果盐字符串起始"rounds=<N>$" ,则使用N的数字值,以指示所述散列回路应多少次被执行,很象上的Blowfish成本参数。 回合的默认数量为5000,有一个最低的1000,最大值为999,999,999。 该范围之外的任何选择N个将被截断到最近的限制。
- [CRYPT_SHA_512] - SHA-512散列以16字符盐开始$ 6 $。 如果盐字符串起始"rounds=<N>$" ,则使用N的数字值,以指示所述散列回路应多少次被执行,很象上的Blowfish成本参数。 回合的默认数量为5000,有一个最低的1000,最大值为999,999,999。 该范围之外的任何选择N个将被截断到最近的限制。
上,其中该功能支持多个算法的系统,上述常数设置为"1"如果支持和"0" ,否则。
Note:没有解密功能。 该crypt()函数使用单向算法。
句法
crypt( str,salt )
参数 | 描述 |
---|---|
str | 需要。 指定要散列字符串 |
salt | 可选的。 盐字符串的基础上散列 |
技术细节
返回值: | 返回编码的字符串或字符串短于13个字符,并保证从在发生故障时的盐不同 |
---|---|
PHP版本: | 4+ |
更新日志: | $ 2X $ $和$ 2Y模式河豚在PHP 5.3.7中加入应对潜在的高位攻击。 常量SHA-256和SHA-512在PHP 5.3.2中加入。 由于PHP 5.3.2的,无效轮河豚行为返回"failure"字符串("*0" or "*1")而不是回落到DES。 由于PHP 5.3.0的,PHP包含它自己的MD5加密,DES标准,扩展DES和河豚算法实现,并且如果系统缺乏对一个或一个以上的算法的支持将使用它。 |
例
实施例1
在这个例子中,我们将测试不同的算法:
<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt('something','st')."\n<br>";
}
else
{
echo "Standard DES not supported.\n<br>";
}
// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES:
".crypt('something','_S4..some')."\n<br>";
}
else
{
echo
"Extended DES not supported.\n<br>";
}
// 12 character salt
starting with $1$
if (CRYPT_MD5 == 1)
{
echo "MD5:
".crypt('something','$1$somethin$')."\n<br>";
}
else
{
echo
"MD5 not supported.\n<br>";
}
// Salt starting with $2a$. The two
digit cost parameter: 09. 22 characters
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt('something','$2a$09$anexamplestringforsalt$')."\n<br>";
}
else
{
echo "Blowfish DES not supported.\n<br>";
}
// 16 character salt starting with $5$. The default number of rounds is
5000.
if (CRYPT_SHA256 == 1)
{
echo "SHA-256:
".crypt('something','$5$rounds=5000$anexamplestringforsalt$')."\n<br>"; }
else
{
echo "SHA-256 not supported.\n<br>";
}
// 16
character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1)
{
echo "SHA-512:
".crypt('something','$6$rounds=5000$anexamplestringforsalt$');
}
else
{
echo "SHA-512 not supported.";
}
?>
代码的输出类似(depending on the operating system) :
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.
<PHP字符串参考