我的应用程序具有自动更新功能。为了验证它是否成功下载了文件,我比较了两个哈希值,一个是xml,另一个是下载后生成的哈希值。两个哈希是相同的,但它抛出我的两个哈希不相同。当我检查大小时,xml哈希字符串有66而另一个是36.我使用trim方法但仍然没有运气。
string file = ((string[])e.Argument)[0];
string updateMD5 = "--"+((string[])e.Argument)[1].ToUpper()+"--";
string xx="--"+Hasher.HashFile(file, HashType.MD5).ToUpper()+"--";
// Hash the file and compare to the hash in the update xml
int xxx = (updateMD5.Trim()).Length;
int xxxxx = xx.Trim().Length;
if (String.Equals(updateMD5.Trim(), xx.Trim(), StringComparison.InvariantCultureIgnoreCase))
e.Result = DialogResult.OK;
else
e.Result = DialogResult.No;
哈希代码
internal static string HashFile(string filePath, HashType algo)
{
switch (algo)
{
case HashType.MD5:
return MakeHashString(MD5.Create().ComputeHash(new FileStream(filePath, FileMode.Open)));
case HashType.SHA1:
return MakeHashString(SHA1.Create().ComputeHash(new FileStream(filePath, FileMode.Open)));
case HashType.SHA512:
return MakeHashString(SHA512.Create().ComputeHash(new FileStream(filePath, FileMode.Open)));
default:
return "";
}
}
private static string MakeHashString(byte[] hash)
{
StringBuilder s = new StringBuilder();
foreach (byte b in hash)
s.Append(b.ToString("x2").ToLower());
return s.ToString();
}
StringBuilder s=new StringBuilder();
foreach (char c in updateMD5.Trim())
s.AppendLine(string.Format("{0}=={1}",c,(int)c));
答案 0 :(得分:1)
一旦你显示较长字符串的字符输出字符,解释就很清楚了。
至于为什么这种情况发生,由于问题的性质,我们很难说清楚。
无论如何,问题是这两个:
==8204
==8203
这两个代码点是0x200C和0x200B又名:
这些是隐形字符,旨在提供破解算法和类似血腥内容的提示。
简单地说,在您的代码中,在您连接字符串的某处,您将这两个字符作为源代码的一部分。由于它们在源代码中不可见(零宽度,请记住),因此很难发现它们。
我会看一下这个涉及的所有字符串,特别是我会先使用用于构建哈希码的"x2"
格式字符串,或者可能返回用于更新的MD5代码的代码。应用