Bcrypt 如何使解密变慢?

How Bcrypt makes decryption slow?

bcrypt的算法内部发生了什么,人们说它比有或没有盐的md5、sha1和sha256慢?

SHA 系列算法旨在高效地为大量输入创建哈希。另一方面,bcrypt 旨在对小输入执行计算量大的操作(仅使用输入的前 72 个字节,尽管这对于大多数密码来说应该足够了)。

更具体地说,bcrypt 使用输入盐和消息为 Blowfish 块密码版本执行密钥设置,该版本已被修改以使密钥设置更昂贵。然后该算法使用该密码来加密已知明文 (OrpheanBeholderScryDoubt)。这就是输入熵有 72 字节限制的原因 - Blowfish 算法需要初始化的子密钥数量有限。

Wikipedia describes this process in more detail.

BCrypt 有一个成本因素,它控制完成多少次哈希迭代。将来可以增加此成本因素以适应更快的硬件。

cost factor会被提高到2的次方,也就是说cost factor每增加1,计算时间就会翻倍。目前推荐值约为 10-12,具体取决于您的服务器。