我正在研究使用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”应该匹配,但不匹配。有什么建议吗?
感谢您的帮助!
在代码的第一块中,您从具有string.empty
哈希的对象生成一个哈希,但是在第二块中,您试图从该哈希不再为string.empty
但已被设置的对象生成哈希到在第一段代码中生成的哈希-因此哈希将不匹配。
[在第二个代码块中加载文件时,需要将Hash
属性设置为string.empty
以使哈希值匹配。