用 bcrypt (PHP) 比较两个哈希值

Posted

技术标签:

【中文标题】用 bcrypt (PHP) 比较两个哈希值【英文标题】:Compare two hashes with bcrypt (PHP) 【发布时间】:2014-11-03 19:38:28 【问题描述】:

在我的数据库中,我用

保存了密码
password_hash($user->getPassword(), PASSWORD_BCRYPT);

在登录表单中,用户输入此密码,我将密码编码为 bcrypt 字符串并将加密后的密码(因为我没有 SSL)提交给服务器。

所以我的问题是可以比较使用 bcrypt 生成的两个哈希吗?

【问题讨论】:

没有。除非他们使用完全相同的盐和成本参数。 嗯,这意味着如果我使用相同的盐和成本,这可能吗?但我认为在 javascript 中显示盐和成本是非常糟糕的...... @user2831042 盐和成本不是敏感项目。您应该担心您正在为网站提供服务,并且您的关键安全功能未加密且容易受到攻击。 @user2831042 如果您需要对多个哈希使用相同的盐,那么您做错了。正如 ceejayoz 所说,获取 SSL 证书。 About password hashing system on client side的可能重复 【参考方案1】:

在登录表单中,用户输入此密码,我将密码编码为 bcrypt 字符串并将加密后的密码(因为我没有 SSL)提交给服务器。

停止你正在做的事情,去购买 SSL 证书。有几个地方(https://www.startssl.com/ 是其中之一)您可以免费获得一个,或者您可以支付 7 美元给像 Namecheap 这样的人。

你已经实现了安全的错觉。在客户端散列密码并没有提供有意义的安全优势 - 任何 MITM 攻击者只需将调整后的 JavaScript 副本提供给他们正在攻击的人(或者只是拦截散列密码,这本质上是用户的真实 方案中的密码)。

【讨论】:

以上是关于用 bcrypt (PHP) 比较两个哈希值的主要内容,如果未能解决你的问题,请参考以下文章

nodejs - 如何比较bcrypt的两个哈希密码

我的bcrypt密码验证总是失败,说hashedPassword不是给定passwordPASS的哈希值

PHP处理0e开头md5哈希字符串缺陷/bug

基于令牌的身份验证和哈希密码

MD5碰撞

[将Bcrypt与phpto哈希密码结合使用不起作用