密码散列算法

密码散列算法函数password_xxxx

下面总结就是:bcrypt很安全,比md5和sha1安全,但是有速度的代价.

11005865-397f2873766765db.png

Modern  PHP原文

对于密码的生成和校验我们可以用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 — 验证密码是否和散列值匹配

11005865-a6d9e78bb6d7d260.png

password_needs_rehash — 检测散列值是否匹配指定的选项

11005865-be7c9ba5d4684d5a.png

注意:这个方法的用处就是.比如你一开始使用的是cost=10的加密,现在你机器性能加强了可以用cost=13的了,我们就可以用这个方法进行判断,发现当前加密用的是cost=10的,我们就重新进行加密

password_get_info—返回指定散列(hash)的相关信息

11005865-0b8844658797cd41.png

 

参考

Modern   PHP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值