c# - 我应该为表中的密码字段使用什么? MD5 还是 SHA1?

标签 c# .net cryptography md5 sha1

我绝不是安全专家,甚至不是新手。我充其量只是安全方面的新手。

有人建议我使用 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/

相关文章:

php - PHP crypt() 函数的 salt 参数和返回值如何工作?

C#WPF获取 ListView 的多选行的值

c# - 在 C# 中为多边形创建形状文件 (.shp)

c# - Neo4j + bolt + C#;如何通过将映射作为参数传递来通过一个查询创建多个节点

.net - 系统.Net.Mail.SmtpException : The SMTP server requires a secure connection or the client was not authenticated on Azure

java 密码学 BigInteger - 生成素数 q 来查找素数 P =2q+1,完成 - 现在如何生成并确认原根 g?

c# - 使用注册的 lambda 将一种类型转换为另一种类型的类

c# - Microsoft.Build 和 Microsoft.Web.Administration nuget 包之间的冲突

c# - Asp.net MVC 中的部分 View 有什么意义

c# - 保护内存中的对称加密 key