我绝不是安全专家,甚至不是新手。我充其量只是安全方面的新手。
有人建议我使用 SHA1 而不是 MD5 - 为什么我要选择一个而不是另一个?一个更安全吗?
最佳答案
我会至少使用 SHA2(256) - 但是:
由于 rainbow table,简单地在数据库中散列密码几乎没有意义。攻击。同样,加盐哈希更好,但如果有人可以访问您的数据库,那么他们很可能可以访问您的代码,在这种情况下,他们可能会反汇编固定加盐。同样,如果你使用随机盐,那么无论如何你都会将它存储在行内,所以虽然它会减慢人们的速度,但他们仍然可以用彩虹表攻击它。
更好的解决方案是使用 Password Stretching它使用随机盐以及随机(高)次数的迭代,因此尝试对每个密码进行暴力攻击需要更长的时间,因此从物理上更难破解所有密码。
我相信 .Net 可以使用 PBKDF 实现这一点 - 但我放错了它的链接(有人向我提供了我刚才提出的问题的答案)。 编辑 - 找到 .Net 的链接:Rfc2898DeriveBytes Class .
基于 MD5
虽然正如其他答案所提到的那样,MD5 确实被证明是“损坏的”,但我不使用它的主要原因——以及为什么我读到不建议使用它——是因为它实际上非常速度快,从而增加了在给定时间内出现裂缝的可能性。
关于c# - 我应该为表中的密码字段使用什么? MD5 还是 SHA1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063773/