PHP中常见的密码处理方式和建议总结(3)

options, 一个包含有选项的关联数组。目前支持两个选项:
salt,在散列密码时加的盐(干扰字符串),
cost,用来指明算法递归的层数。这两个值的例子可在 crypt() 页面找到。

示例,

<?php $password = 'rasmuslerdorf'; $hash = '$2y$10$YCFsG6elYca568hBi2pZ0.3LDL5wjgxct1N8w/oLR/jfHsiQwCqTS'; // cost 参数可随硬件的提升也不断提升 $options = array('cost' => 11); // 使用纯文本密码 验证存储的散列 if (password_verify($password, $hash)) { // 检查是否有更新的散列算法可用或 cost 是否已经改变 if (password_needs_rehash($hash, PASSWORD_DEFAULT, $options)) { // 如果是,请创建一个新的哈希值,并替换旧的哈希值 $newHash = password_hash($password, PASSWORD_DEFAULT, $options); } // 用户登录验证完成 // ... } ?>

password_verify

说明

boolean password_verify ( string $password , string $hash )

注意 password_hash() 返回的哈希包含了算法、 cost 和盐值。 因此,所有需要的信息都包含内。使得验证函数不需要储存额外盐值等信息即可验证哈希。

参数

password, 用户的密码。

hash, 一个由 password_hash() 创建的散列值。

示例,

<?php // 想知道以下字符从哪里来,可参见 password_hash() 的例子 $hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; if (password_verify('rasmuslerdorf', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; } ?>

以上例程会输出:

Password is valid!

PHP5.50 之前的密码哈希 API

安东尼·费拉拉(PHP原生密码哈希 API的开发者)为PHP5.5.0 以下的版本也提供了 ircmaxell/password-compat组件(https://packagist.org/packages/ircmaxell/password-compat)。

这个组件也实现了PHP密码哈希API中的所有函数,

password_get_info

password_hash

password_needs_rehash

password_verify

我们可以直接使用 Composer 把这个组件添加到我们的应用中就行了。例如,

composer require ircmaxell/password-compat

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5d2bd2285e107bd59ae73d568d24b2f7.html