可能的重复项:
我应该使用什么算法将密码散列到我的数据库中?
我是这个密码哈希的新手。我阅读了哈希+盐使密码非常安全。但仍然困惑我应该使用哪种哈希算法,因为有很多类似的算法。
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 很好。
https://security.stackexchange.com/questions/5586/why-do-people-think-that-this-is-bad-way-to-hash-passwords
SHA1 vs md5 vs SHA256:使用哪个用于 PHP 登录?
SHA-1 的密码存储安全吗?