密码散列算法
密码散列算法函数password_xxxx
下面总结就是:bcrypt很安全,比md5和sha1安全,但是有速度的代价.
![](https://img.haomeiwen.com/i11005865/397f2873766765db.png)
对于密码的生成和校验我们可以用PHP自带的一个工具进行password_
password_hash(string 需加密的参数 ,int $algo(使用的算法) [,array $options] ) 创建密码的散列(hash)
$algo有PASSWORD_DEFAULT, PASSWORD_BCRYPT, PASSWORD_ARGON2I
PASSWORD_DEFAULT- 使用 bcrypt 算法。该常量会随着 PHP 加入更新更高强度的算法而改变。 所以生成结果的长度将在未来有变化。 因此,数据库里储存结果的列可超过60个字符(最好是255个字符)。
$options
cost : 越大越安全,但是速度越慢,默认是10.用来指明算法递归的层数
password_hash的返回值里面有使用的算法、cost 和盐值.所以在校验的时候我们不需要指明对应的加密方式cost等配置方式.这个很重要,理解了这个你就能理解下面的3个方法.为什么只要一个hash加密值就行了.不能指明对应的加密方式
/**
* 这个例子对服务器做了基准测试(benchmark),检测服务器能承受多高的 cost
* 在不明显拖慢服务器的情况下可以设置最高的值
* 8-10 是个不错的底线,在服务器够快的情况下,越高越好。
* 以下代码目标为 ≤ 50 毫秒(milliseconds),
* 适合系统处理交互登录。*/
$timeTarget = 0.05; // 50 毫秒(milliseconds)
$cost = 8;
do {
$cost++;
$start = microtime(true);
password_hash("test", PASSWORD_DEFAULT, ["cost" => $cost]);
$end = microtime(true);
} while (($end - $start) < $timeTarget);
echo "Appropriate Cost Found: " . $cost;
password_verify — 验证密码是否和散列值匹配
![](https://img.haomeiwen.com/i11005865/a6d9e78bb6d7d260.png)
password_needs_rehash — 检测散列值是否匹配指定的选项
![](https://img.haomeiwen.com/i11005865/be7c9ba5d4684d5a.png)
注意:这个方法的用处就是.比如你一开始使用的是cost=10的加密,现在你机器性能加强了可以用cost=13的了,我们就可以用这个方法进行判断,发现当前加密用的是cost=10的,我们就重新进行加密
password_get_info—返回指定散列(hash)的相关信息
![](https://img.haomeiwen.com/i11005865/0b8844658797cd41.png)
参考
Modern PHP