字符串不等于事件它实际上是相等的

时间:2016-11-07 08:53:05

标签: c# winforms hash

我的应用程序具有自动更新功能。为了验证它是否成功下载了文件,我比较了两个哈希值,一个是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();
    }

注意:我使用' - '检查是否有尾随空格 enter image description here

    StringBuilder s=new StringBuilder(); 
        foreach (char c in updateMD5.Trim())
            s.AppendLine(string.Format("{0}=={1}",c,(int)c));

enter image description here

1 个答案:

答案 0 :(得分:1)

一旦你显示较长字符串的字符输出字符,解释就很清楚了。

至于为什么这种情况发生,由于问题的性质,我们很难说清楚。

无论如何,问题是这两个:

==8204
==8203

这两个代码点是0x200C和0x200B又名:

这些是隐形字符,旨在提供破解算法和类似血腥内容的提示。

简单地说,在您的代码中,在您连接字符串的某处,您将这两个字符作为源代码的一部分。由于它们在源代码中不可见(零宽度,请记住),因此很难发现它们。

我会看一下这个涉及的所有字符串,特别是我会先使用用于构建哈希码的"x2"格式字符串,或者可能返回用于更新的MD5代码的代码。应用