8

这就是问题:有可能破解 sha1(md5('password')) 密码吗?

或者 sha1 中的 md5 或 md5 中的 sha1 如何更好?

谢谢!

4

6 回答 6

11

多重哈希不会进一步保护您的密码。只需使用安全的盐渍哈希即可。

查看http://php.net/hash

于 2011-04-23T16:29:28.733 回答
3

根据维基百科的 MD5 文章

" MD5 哈希函数的安全性受到严重损害。 "

因此,将 MD5 添加到 SHA1 不会让您的东西更安全。我什至会说散列一个已经散列的东西也不会使它更安全。

许多人用于存储密码的常见机制是散列字符串上的盐加密。

于 2011-04-23T16:34:32.873 回答
3

由于没有人回答最初的问题:是的,这是可能的。

至于第二个问题:与仅使用 sha1 相比, md5(sha1('password')) 实际上会降低安全性,因为散列大小会减小。而反过来也无济于事。

总是用盐腌

于 2011-04-23T16:41:33.130 回答
1

md5会给你一个 32 个字符的字符串。
sha1会给你一个40个字符的srings。

但是,在这两种情况下,这些字符串将只包含十六进制字符,这意味着每个位置只有 16 个可能的值:0-9 和 af


我不认为使用 md5+sha1 (无论您以哪种顺序调用它们)是一个好主意:仅在密码中使用其中一个可能会更安全。

只需考虑:

  • 例如,您的密码中至少可以包含 8 个字符
  • 这 8 个字符中的每一个都可以是一个字母(大写或小写)、一个数字、一个特殊字符;这意味着每个位置至少有 75 种可能性

您不认为这会比 32 个十六进制字符产生更多可能的组合吗?


只需使用一种散列函数,并加盐密码。

于 2011-04-23T16:30:25.880 回答
0

将散列函数相互包装不会使您的散列更加安全。仍然可以构建彩虹表以允许攻击者读取数据库中的大量密码。

这当然是假设他们可以访问您的代码,但他们可能会这样做,因为在这个阶段他们可以访问您的数据库。

于 2011-04-23T16:29:28.693 回答
0

使用两个散列并不能使您的算法安全;散列一次,使用最好的(更多位)算法并添加一些盐。例如:

sha1('This is some salt' . $string . 'othersalt')

这对彩虹表来说要安全得多。我的意思是:不完全安全,因为攻击者可以建立一个彩虹表,但它更安全,因为普通的彩虹表不起作用。另请注意,这两种算法都已被破解:我强烈建议您使用 SHA-2,例如 sha-128 或 sha-256。他们仍然没有被打破。
最后一件事:总是对彩虹表进行盐哈希。始终使用最好的哈希值:SHA-3 即将到来,您可能想要使用它。

于 2012-09-10T10:31:26.517 回答