可能重复:
我应该使用什么算法将密码散列到我的数据库中?
我是这个密码散列的新手。我读了哈希+盐使密码非常安全。但是仍然很困惑我应该使用哪种散列算法,因为有很多类似的。
MD5CryptoServiceProvider
SHA1Managed
SHA256Managed
等等
我如何决定哪一个对我有好处或所有人都是平等的。我可以盲目接人吗?
可能重复:
我应该使用什么算法将密码散列到我的数据库中?
我是这个密码散列的新手。我读了哈希+盐使密码非常安全。但是仍然很困惑我应该使用哪种散列算法,因为有很多类似的。
MD5CryptoServiceProvider
SHA1Managed
SHA256Managed
等等
我如何决定哪一个对我有好处或所有人都是平等的。我可以盲目接人吗?
MD5:
1996 年,发现 MD5 的设计存在缺陷,虽然这不是一个明显的致命弱点,但密码学家开始推荐使用其他算法,例如 SHA-1,后来发现该算法也很容易受到攻击。
SHA1:
2005 年,密码分析员发现对 SHA-1 的攻击表明该算法可能不够安全,无法持续使用
在撰写本文时,SHA256 是一种类型的SHA2没有已知漏洞。
像 MD5、SHA-1 甚至 SHA-256 这样的快速哈希算法不是哈希密码的好选择,因为它们太快并且很容易被暴力破解。在 2013 年,使用普通硬件每秒可以计算出大约3 Giga SHA-1 值。
相反,您可以使用慢速密钥派生函数,如 BCrypt 或 PBKDF2。CSharp 对 PBKDF2 具有原生支持,它可以使用 Rfc2898DeriveBytes 类来实现,您可以在此处找到示例。
这个BCrypt 库也易于使用。通常人们不确定使用这些库是否安全,但我认为没有反对使用它的论据。只要库返回正确的值并正确生成盐,就应该没问题,因为安全性来自算法而不是实现。
MD5 被认为是可破解的。SHA1 很好,但也许可以破解。SHA256 不错。