我绝对不是安全专家,甚至连新手都算不上。至多也只能算是安全方面的初学者。
有人建议我使用SHA1而不是MD5——为什么我要选择其中之一?其中一个更安全吗?
我绝对不是安全专家,甚至连新手都算不上。至多也只能算是安全方面的初学者。
有人建议我使用SHA1而不是MD5——为什么我要选择其中之一?其中一个更安全吗?
我至少会使用SHA2(256)- 但是:
仅仅在数据库中散列密码几乎没有任何意义,因为会遭受彩虹表攻击。同样,加盐哈希更好,但如果有人可以访问您的数据库,那么他们很可能可以访问您的代码,在这种情况下,他们可以轻松地破解固定的盐。同样,如果您使用随机盐,那么您将其存储在行内,因此虽然它会减慢攻击者的速度,但他们仍然可以用彩虹表攻击它。
一个更好的解决方案是使用密码加强,它使用随机盐以及随机(高)数量的迭代,以便尝试针对每个密码的暴力攻击需要显着更长的时间,因此使得破解所有密码在物理上更加困难。
我相信在.Net中可以使用PBKDF来实现这一点——但是我已经找不到了链接(有人在我之前提出的问题的答案中提供了它)。编辑-找到.Net的链接:Rfc2898DeriveBytes类。
关于MD5
尽管如其他答案所述,MD5确实已被证明是“破解”的,但我不使用它的主要原因 - 也是我读到它不建议使用的原因 - 是因为它实际上非常快,从而增加了在给定时间内破解的可能性。
MD5已经被“破解”,现在更高级别的安全性需要使用SHA-2。这里有一个非常有趣的阅读材料http://en.wikipedia.org/wiki/MD5。
编辑:晚了9秒 :)