我正在使用项目中的设置文件存储加密密码。使用的加密是md5,保存哈希的一切工作正常。当我查看app.config时,我也可以看到正确的哈希值。然而,当检索散列时,字符串使其字符转义,这使得无法进行比较
这是我用来生成哈希
的代码System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] data = System.Text.Encoding.ASCII.GetBytes(password);
data = x.ComputeHash(data);
String md5Hash = System.Text.Encoding.ASCII.GetString(data);
为了测试我输入了文本“Test”,它生成了“\ f?f?T \ v ??? 8 ?? Za [”
当从设置文件中检索密码时,我得到“\\ f?f?T \\ v ??? 8 ?? Za [”
如何解决这个问题?
答案 0 :(得分:2)
首先,不要那样做。从ComputeHash
返回的数据不是 ASCII编码的文本,因此您不应该调用Encoding.ASCII.GetString(data)
。首选[{1}} - 并且还希望使用Convert.ToBase64String(data)
进行散列,否则您将丢失非ASCII密码的数据。
其次,我怀疑,当你检索数据时,数据并没有真正被转义 - 我的猜测是你在Visual Studio调试器中查看它,而那是< / em>添加转义,而不是它存在于实际的字符串中。检查Encoding.UTF8.GetBytes(password)
的结果,一次看一个字符。
第三,使用比MD5更好的哈希密码:)