我应该对表中的密码字段使用什么; MD5还是SHA1?

Ser*_*pia 5 .net c# md5 cryptography sha1

我绝不是安全专家,甚至不是新手.我最好是安全新手.

有人建议我使用SHA1而不是MD5 - 为什么我会选择一个而不是另一个?一个人更安全吗?

And*_*tan 10

我会至少使用SHA2(256) - 但是:

由于彩虹表攻击,在数据库中简单地散列密码几乎没有意义.同样,盐渍哈希更好,但如果有人可以访问您的数据库,那么他们可能有权访问您的代码,在这种情况下,他们可能会拆解固定的盐.同样地,如果你使用随机盐,那么你无论如何都要将它存储在行内,所以当它减慢人们的速度时,他们仍然可以用彩虹表攻击它.

更好的解决方案是使用密码拉伸,它使用随机盐以及随机(高)次迭代次数,因此尝试对每个密码进行暴力攻击所需的时间要长得多,因此破解所有密码的实际情况更加困难.

我相信.Net这可以通过PBKDF来实现 - 但是我错误地给了它一个链接(有人提供给我一个我刚才问过的问题的答案).编辑 - 找到.Net的链接:Rfc2898DeriveBytes Class.

在MD5上

虽然其他答案中提到MD5确实被证明是"破碎"的,但我不会使用它的主要原因 - 以及为什么我读到它不建议使用它 - 是因为它实际上非常快,因此在给定的时间内增加裂缝的可能性.