我目前正在使用登录系统的表单应用程序,用户必须输入用户名和密码才能使用该程序。这些用户帐户存储在XML文件中,目前以纯文本格式存储(我只在原型阶段)。我正在寻找一种方法来散列密码(可能是用户名),然后将它们存储在XML文件中。
我已经对此进行了一些研究,但每次我进行另一次搜索时,我都会找到一种加密刺痛的不同方法。某些方法能够加密和解密字符串,而其他方法只能加密字符串。我试图找到最适合我情况的方法。
对于我的代码,我只需要对密码进行哈希处理。这有助于让我们更加安全。我可以显然只是在登录时散列密码然后进行比较,因此解密不是一个真正的问题。此外,该过程需要在任何计算机上运行。我已经看到一些只能在一台机器上运行的答案,我正在寻找可能的跨机器兼容的东西。另一件事是,散列的输出必须能够序列化为XML文件,而无需对用于写入XML文件的代码进行太多的重新处理。目前我正在使用XMLSerializer和StreamWriter来写入XML文件。
同样,我已经看到了许多加密或散列密码的方法,但我对加密和散列内容相对较新,所以我不知道这样做的好办法。任何帮助将不胜感激,如果需要,我可以添加一些示例代码。
答案 0 :(得分:3)
详细信息:
答案 1 :(得分:2)
散列密码的正确方法是使用像bcrypt or scrypt这样的专用函数。
答案 2 :(得分:1)
像MD5,SHA-1甚至SHA-256这样的快速哈希算法不是哈希密码的好选择,因为它们太快了,而且太容易暴力破解。可以使用通用硬件计算3 Giga SHA-1 per second。
相反,您可以使用慢速键派生函数,如BCrypt或PBKDF2。 CSharp对PBKDF2有本机支持,它可以用Rfc2898DeriveBytes类实现,你可以找到here的例子。
这个BCrypt library也很容易使用。通常人们不确定使用这些库是否安全,但我认为不存在反对使用它的论点。只要库返回正确的值并正确生成salt,它应该没问题,因为安全性来自算法,而不是来自实现。