Php/func string crypt
来自菜鸟教程
PHP crypt()函数
定义和用法
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 // 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.