首先,我发现要使用 CRYPT_BLOWFISH,我需要使用以 $2a$ 开头的 16 字符盐。但是,那crypt() 的 php.net 文档说有些系统不支持CRYPT_BLOWFISH。这种情况有多常见?
接下来,从文档上的示例中,我看到我使用 crypt() 如下:
<?php
$password = crypt('mypassword'); // let the salt be automatically generated
/* You should pass the entire results of crypt() as the salt for comparing a
password, to avoid problems when different hashing algorithms are used. (As
it says above, standard DES-based password hashing uses a 2-character salt,
but MD5-based hashing uses 12.) */
if (crypt($user_input, $password) == $password) {
echo "Password verified!";
}
?>
为了使用 CRYPT_BLOWFISH,我唯一需要修改的是第一行以使其像这样;
crypt('mypassword', '$2a$07$usesomesillystringforsalt$')
然后其余的线就可以了?
对于 5.3.0 之前的 PHP,crypt() 使用操作系统提供的库。如果您使用的是早期版本,那么您需要检查操作系统文档以查看它是否受支持(检查 CRYPT_BLOWFISH 常量的值) - 如果不支持,则该算法是在 PHP 的 mcrypt() 扩展中实现的。
您从文档中引用的示例似乎没有多大意义:
$stored_password=fetch_password($user);
if (crypt($_REQUEST['password'],$stored_password)===$stored_password) {
// note that crypt automatically extracts the salt and alogrithm type
// from $stored_password
....
创建密码时只需指定前缀($2a$)。
HTH
C.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)