每个字符串的PHP password_hash函数值都不相同

Lwi*_*yat 3 php password-hash php-password-hash

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

<?php 
    echo password_hash('a',PASSWORD_BCRYPT,array(
            'cost' => 12
         ));
?>
Run Code Online (Sandbox Code Playgroud)

第4次测试时间的结果

1. $2y$12$SRmipqM7AsYkx3Xc8QGHNex69rGXeVyWGTYrh9T8sh1cP3UrdjfQi
2. $2y$12$zx.GUgtcake3wMfl3/YXXeG1.8mmHKyRruL3nWj8OmA.RbEYqeW6u
3. $2y$12$XQtmFplcehkgWLbGrOUsNOlXDU/NGrwZlt3HM88hLbUHXhjXNF4km
4. $2y$12$q9/OSZdDJw7af4Hw4MGlHeY7UMtWr9/Cj0nj/N6PaoilNoUBePt7O
Run Code Online (Sandbox Code Playgroud)

Mik*_* M. 9

有些人建议使用MD5,不要用它来进行密码散列.

那么现在回答你的问题 how to check a password matches

Password_Hash()是生成一个密码哈希,它会随之创建一个随机盐,这个哈希将在哈希时使用.你的最终结果将是:salt + hash,但是你可以salt在它的选项中使用这个方法给它一个但是让它保持它自己做它.

Password_Verify()使用密码参数和散列密码.正如我之前所说的,散列密码是salt + hash,这是有意义的,Password_Verify()只需要这些而不是另外一个被调用的salt

所以会发生的Password_Verify()是它取出盐并Password_Hash()与盐一起使用.然后检查接收的散列是否等于给定的散列.如果它匹配那么它是真的,否则它是假的.

Password_Hash()文件

Password_Verify()Doc


更新18-04-2018(dmY)

警告

PHP 7.0.0起,salt选项已被弃用.

现在优选简单地使用默认生成的盐.

有关Salting的更多信息 - SO回答以下Veve

为什么不使用MD5进行密码散列 - PHP FaQ答案

为什么不使用MD5进行密码散列-SO回答:Silverlightfox