我尝试使用 password_hash() PHP 函数来散列用户密码。但是,它的功能是工作散列,而不是常量。

<?php
    echo password_hash('a',PASSWORD_BCRYPT,array(
            'cost' => 12
         ));
?>

第四次测试结果
1. $2y$12$SRmipqM7AsYkx3Xc8QGHNex69rGXeVyWGTYrh9T8sh1cP3UrdjfQi
2. $2y$12$zx.GUgtcake3wMfl3/YXXeG1.8mmHKyRruL3nWj8OmA.RbEYqeW6u
3. $2y$12$XQtmFplcehkgWLbGrOUsNOlXDU/NGrwZlt3HM88hLbUHXhjXNF4km
4. $2y$12$q9/OSZdDJw7af4Hw4MGlHeY7UMtWr9/Cj0nj/N6PaoilNoUBePt7O

最佳答案

有些人建议使用 MD5,不要将其用于密码散列。
那么现在回答你的问题 how to check a password matchesPassword_Hash() 是生成一个密码哈希,它会用它创建一个随机盐,这个哈希将在哈希时使用。
你的最终结果是:salt+hash, 但是 你可以在它的选项中使用这种方法给它一个 salt 但让我们保持它自己完成它。Password_Verify() 使用一个参数作为密码,一个参数作为散列密码。
正如我之前所说,散列密码是 salt+hash
这是有道理的 Password_Verify() 只需要这些而不是额外的 salt所以 Password_Verify() 发生的事情是它取出盐并使用带有盐的 Password_Hash()
然后检查接收到的哈希值是否等于给定的哈希值。
如果匹配则为真,否则为假。
Password_Hash() Doc
Password_Verify() Doc

更新 18-04-2018 (d-m-Y)

More information about Salting - SO Answer below by Veve
Why not to use MD5 for Password Hashing - PHP FaQ Answer
Why not to use MD5 for Password Hashing - SO Answer by: Silverlightfox

关于每个字符串的 PHP password_hash 函数值都不相同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28626278/

10-13 02:55