我正在研究在 PHP 中使用 bcrypt 的哈希和加盐密码。 有人可以向我解释为什么 brcypt 使用“work”/“rounds”来防止攻击吗?
我已经读过“How do you use bcrypt for hashing passwords in PHP? ”,但我很难理解如果有人掌握了您的数据库并可以离线破解它,它有何特别之处?
是否有可能通过盐和哈希一起来保护数据库免受彩虹表的影响?或者 bcrypt 是否做了一些特殊的事情来帮助防止这样的攻击?
最佳答案
简单地说,bcrypt
比 sha
系列等其他一些哈希算法“更好”,因为它故意变慢,并且可以通过使用高迭代次数来故意变慢。此外,它需要使用盐来防止使用预先计算的哈希值(彩虹表)。 salt 值应与 bcrypt 的每个输出一起生成/存储,以禁止不同用户的值之间进行比较(如果他们使用相同的密码)。
即使攻击者获取了您的密码哈希值和盐,只要您使用 bcrypt
进行大量迭代,就不可能快速找到匹配的密码。这是一种单向函数,因此您需要为尝试的每个密码执行一次 bcrypt 计算。这当然不能有效防止错误密码。
关于php - bcrypt功能说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129333/