<?php $password = 'admin'; // 密码明文 // ---------- 说明 ---------- // 相同的密码每次进行password_hash()运算得到的密码哈希都是不同的,正是因为这个特性 // 所以没有办法利用彩虹表破解,而可以利用彩虹表破解恰恰是md5()和sha1()致命弱点。 $passwordHash = password_hash($password, PASSWORD_DEFAULT); // 将密码明文加密 echo "密码明文:{$password}" . PHP_EOL; // 密码明文:admin echo "密码哈希:{$passwordHash}" . PHP_EOL; // 密码哈希:$2y$10$YK62GWeWaB5PtPbOhzNzHOWtv6QzrKkfGZkB9pxG3PkJKGVZhN3jG if (password_verify('12345', $passwordHash)) { echo '12345密码正确' . PHP_EOL; } else { echo '12345密码错误' . PHP_EOL; // 12345密码错误 } if (password_verify('admin', $passwordHash)) { echo 'admin密码正确' . PHP_EOL; // admin密码正确 } else { echo 'admin密码错误' . PHP_EOL; } // ---------- 使用注意事项 ---------- // 1、密码哈希长度目前为60个字符,以“$2y$10$”开头,后面跟一串随机字符串,但是随着PHP加入更新更高强度的算法,密码哈 // 希长度可能超过60个字符,设计数据库时字段长度最好是255个字符。 // 2、password_hash()非常耗时,实验数据显示进行100次循环password_hash()耗时是md5()的5万倍,所以使用password_hash()加 // 密的登录功能会让用户感觉有点慢,但带来的优点是在相同时间内密码重试次数少,可以降低穷举破解密码的风险。 // 3、password_hash()加密和password_verify()验证密码是PHP语言特有的,其它语言没有办法对密码进行操作,即无法跨平台不 // 具备通用性。
Copyright © 2023 码农人生. All Rights Reserved