Php/func string crypt

来自菜鸟教程
跳转至:导航、​搜索

PHP crypt()函数

❮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]-以$ 1 $开头的12字符盐的MD5哈希
  • [CRYPT_BLOWFISH]-以$ 2a $,$ 2x $或$ 2y $开头的盐的河豚散列,两位数的成本参数“ $”,以及字母“ ./0-9A-Za-z”中的22个字符。使用字母以外的字符将导致此函数返回长度为零的字符串。“ $”参数是基础Blowfish捣乱哈希算法的迭代计数的以2为底的对数,并且必须在04-31范围内。超出此范围的值将导致功能失败。
  • [CRYPT_SHA_256]-SHA-256散列,带有16个字符的盐,以$ 5 $开头。如果盐字符串以“ rounds = <N> $”开头,则N的数值用于指示应执行哈希循环的次数,这与Blowfish上的cost参数非常相似。默认的回合数为5000,最小值为1000,最大值为999,999,999。超出此范围的N的任何选择都将被截断到最接近的限制。
  • [CRYPT_SHA_512]-SHA-512哈希,以16个字符的盐开头,为$ 6 $。如果盐字符串以“ rounds = <N> $”开头,则N的数值用于指示应执行哈希循环的次数,这与Blowfish上的cost参数非常相似。默认的回合数为5000,最小值为1000,最大值为999,999,999。超出此范围的N的任何选择都将被截断到最接近的限制。

在此函数支持多种算法的系统上,如果支持,上述常量设置为“ 1”,否则为“ 0”。

注意: 没有解密功能。crypt()函数使用单向算法。

句法

crypt(str,salt)

参数值

参数 描述
str 需要。指定要散列的字符串
salt 可选的。一个盐字符串作为哈希的基础

技术细节

返回值: 返回编码的字符串或短于13个字符的字符串,并保证在失败时与盐值不同
PHP版本: 4+
更新日志: PHP 5.6.0-如果出现E_NOTICE安全警告

salt 被省略。
PHP 5.3.7-添加了$ 2x $和$ 2y $ Blowfish模式。
PHP 5.3.2-添加了SHA-256和SHA-512。固定的Blowfish在无效回合中的行为返回“失败”字符串(“ * 0”或“ * 1”),而不是退回到DES。
PHP 5.3.0-PHP现在包含其自己的MD5加密,标准DES,扩展DES和Blowfish算法实现,如果系统缺乏对一种或多种算法的支持,将使用该实现。

更多例子

在此示例中,我们将测试不同的算法:

<?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 $6$. 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.";
}

?> 

上面代码的输出可能是(取决于操作系统):

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