最新的Web开发教程
 

PHP crypt() Function


<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字符串参考