bcrypt和hashing多次有什么区别?

Luk*_*ame 14 passwords hash password-protection bcrypt

bcrypt如何强大,比方说,

def md5lots(password, salt, rounds):
    if (rounds < 1)
        return password
    else
        newpass = md5(password + salt)
        return md5lots(newpass, salt, rounds-1)
Run Code Online (Sandbox Code Playgroud)

考虑到它的炒作,我得到的感觉是,比我更聪明的人已经发现bcrypt比这更好.有人能解释"聪明的外行人"条款的差异吗?

Adr*_*ian 7

主要区别 - MD5 和其他旨在验证数据的哈希函数被设计得很快,而 bcrypt() 被设计得很慢。

当您验证数据时,您需要速度,因为您希望尽可能快地验证数据。

当您试图保护凭据时,速度会对您不利。拥有密码哈希副本的攻击者将能够执行更多的暴力攻击,因为 MD5 和 SHA1 等的执行成本很低。

相比之下,bcrypt 是故意昂贵的。当真正的用户尝试进行一两次身份验证时,这并不重要,但暴力破解的成本要高得多。


Jér*_*nge 5

bcrypt 和使用 MD5 进行多次哈希处理之间存在三个显着差异:

  1. 输出的大小:MD5 为 128 位(16 字节),bcrypt 为 448 位(56 字节)。如果您在数据库中存储数百万个哈希值,则必须考虑到这一点。
  2. 针对 MD5 的碰撞和原像攻击是可能的。
  3. 随着 cpu 变得越来越强大,Bcrypt 可以配置为越来越多的迭代。

因此,使用 MD5 进行加盐和拉伸并不像使用 bcrypt 那样安全。这个问题可以通过选择比 MD5 更好的哈希函数来解决。

例如,如果选择 SHA-256,则输出大小将为 256 位(32 字节)。如果可以像 bcrypt 一样配置加盐和拉伸来增加迭代次数,那么两种方法之间没有区别,除了存储结果哈希所需的空间量不同。