当比较的两个字符串相同时,为什么会得到md5哈希不匹配?

问题描述 投票:-1回答:1

我正在研究使用md5哈希的C#程序。使用较旧版本的程序创建文件,并将哈希保存在文件的字段中。这是一个代码片段,显示了哈希和文件的保存:

using (MD5 md5Hash = MD5.Create())
{
     this.Hash = string.Empty;
     s = JsonConvert.SerializeObject(this, Formatting.Indented);
     string hash = MD5hash.GetMd5Hash(md5Hash, s);
     this.Hash = hash;
     s = JsonConvert.SerializeObject(this, Formatting.Indented);
 }

字符串“ s”以JSON格式保存到文件中,而“ this”是被序列化的对象。

在程序的新版本中,我尝试加载上述文件,但是即使我比较文件并且它们相同,md5哈希也不匹配。这是一个代码段:

using (MD5 md5Hash = MD5.Create())
{
     hash = MD5hash.GetMd5Hash(md5Hash, s);
     if (fhash == hash)
     {
         return f;
     }
     else
     {
         throw new Exception("HashMismatch");
     }
 }

“ fhash”是从文件中加载的,它是旧版本中保存的哈希。由于上面代码中新版本中的“ s”与旧版本中的“ s”匹配,因此“ hash”和“ fhash”应该匹配,但不匹配。有什么建议吗?

感谢您的帮助!

c# json hash md5
1个回答
2
投票

在代码的第一块中,您从具有string.empty哈希的对象生成一个哈希,但是在第二块中,您试图从该哈希不再为string.empty但已被设置的对象生成哈希到在第一段代码中生成的哈希-因此哈希将不匹配。

[在第二个代码块中加载文件时,需要将Hash属性设置为string.empty以使哈希值匹配。

© www.soinside.com 2019 - 2024. All rights reserved.