使用GetHashCode来“安全”用户密码
-
03-07-2019 - |
题
我工作的公司已经签订了大型订单处理系统的支持合同。作为初始系统审核的一部分,我注意到存储在数据库中的密码实际上是密码的哈希码。
本质:
string pwd = "some pasword";
string securePwd = pwd.GetHashCode();
我的问题是,这有多安全?
我对此感到不舒服,但我对GetHashCode的工作原理还不太了解。我更喜欢使用类似MD5哈希的东西,但如果我浪费时间,那么我就不会打扰了。
其他提示
这不仅不安全,而且还可能发生变化:
http://netrsc.blogspot.com/2008/ 08 / GetHashCode的-不同-ON-systems.html
GetHashValue为给定输入返回的值在过去已发生变化。
不能保证在应用程序的不同执行之间它们会相同。
我建议使用 BCrypt 。正如其他人已经说过使用GetHashCode进行密码不是一个好主意。
GetHashCode绝对不是以这种方式使用的,因为实现不保证不同对象的不同哈希返回。这意味着可能有多个密码可能会产生相同的哈希值。它也不能保证在不同版本的.NET框架上返回相同的哈希值,这意味着升级可能会为同一个字符串生成不同的哈希值,从而导致您的密码无法使用。
建议您在推送时使用盐渍哈希甚至MD5。您可以轻松地将其切换到 Security.Cryptography 名称空间。
正如其他人所说,GetHashCode不是为你想要做的而设计的。有一个真正的关于如何安全处理用户密码的优秀文章。
总结一下这篇文章,您需要使用相对较慢的自适应散列方案,例如 bcrypt ,或者斯坦福安全远程密码协议。我会建议前者。当然你也应该用盐。
不隶属于 StackOverflow