【问题标题】:Settings file returns escaped string设置文件返回转义字符串
【发布时间】:2012-02-04 03:07:12
【问题描述】:

我正在使用项目中的设置文件存储加密密码。使用的加密是 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);

为了测试,我输入了生成“\f?f?T\v???8??Za[”的文本“Test”

从设置文件中检索密码时,我得到“\\f?f?T\\v???8??Za[”

如何解决这个问题?

【问题讨论】:

  • 它在哪里出现转义?如果在调试时在 Visual Studio 中,那么这就是可视化工具显示它们的方式。

标签: c# string settings


【解决方案1】:

首先,不要那样做。从ComputeHash 返回的数据不是 ASCII 编码的文本,所以你不应该调用Encoding.ASCII.GetString(data)。首选Convert.ToBase64String(data) - 也更喜欢使用Encoding.UTF8.GetBytes(password) 进行散列,否则您将丢失非ASCII 密码的数据。

其次,我怀疑当你检索数据时,它并没有真正被转义 - 我猜你是在 Visual Studio 调试器中查看它,那是 添加转义,而不是出现在实际字符串中。检查md5Hash.ToCharArray() 的结果,一次查看一个字符。

第三,对密码使用比 MD5 更好的哈希 :)

【讨论】:

  • 感谢您的快速回复。我更改了您在第一点中提到的内容,现在比较工作正常:) 至于使用 MD5 哈希,此密码设置一次。该应用程序是在没有互联网的计算机上运行的离线应用程序。确实是为了阻止它以“某种”强度显示在完整的纯文本视图中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 2013-07-09
  • 2017-03-07
相关资源
最近更新 更多