使用 PHPs password_hash 函数值得性能损失吗?

Is using PHPs password_hash function worth the performance hit?

我了解到使用 password_hash() 是使用 php 生成密码的最佳方式之一。我有 运行 一些测试,这个功能在 CPU 上真的很难。与盐渍 sha1() 方法相比值得吗?

我不介意使用它,但可能每 10 秒左右登录一次,所以我担心它会降低服务器速度。

我设置了一个循环来生成 1000 个 password_hash() 值,服务器在 30 秒后超时。相比之下,我生成了 1000 个加盐 sha1() 密码,而且是即时的。

性能损失值得吗?

在数据库中保护密码的目的是在数据库遭到破坏后给你一些时间来注意到你已经被破坏,锁定帐户,并向你的用户发出通知,如果他们重新登录,他们需要更改密码。在其他地方使用它们。

诸如 salted-SHA1 之类的简单散列法几乎无法满足此目的。借助硬件加速的暴力破解,攻击者可以在您有很多机会对其进行任何操作之前获取大量密码。

“值得”总是因每个应用程序及其威胁模型而异,当然还有其他处理方法 passwords/authentication 是合理的,但像 password_hash 这样的方法被认为是基准标准Web 应用程序的练习,今天你必须证明 使用的东西。

并且因为用户确实——唉——在站点之间重复使用密码,所以在散列上略过意味着在数据库被破坏的情况下,不仅仅是您自己站点的安全受到威胁。因此,即使您的服务不包含任何特别敏感的内容,您也对他人负有一定程度的责任。