0

因此,我在使用相同技术比较相同文本的 MD5 总和时遇到了问题。我正在使用 .NET MD5 工具和 Unix 的 md5sum.exe 程序。

这是我的 .NET 代码:

public void Test()
{
    string str1 = "testline1";
    string str2 = "testline2";
    StringBuilder sb = new StringBuilder();

    sb.Append(str1);
    sb.Append(Constants.vbLf);
    sb.Append(str2);

    string hash = GetMD5Hash(sb.ToString());

    //hash = 4fb435ffb8e071151c3411dd3a922460
}

public string GetMD5Hash(string text)
{
    byte[] hash;
    using (MD5 md5 = MD5.Create())
    {
        hash = md5.ComputeHash(Encoding.UTF8.GetBytes(text));
    }

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < hash.Length; i++)
    {
        sb.Append(hash[i].ToString("x2"));
    }

    return sb.ToString();
}

我有一台运行基于 unix 的操作系统的服务器,上面有 md5sum.exe。在我的服务器上,我有一个简单的文件:

testline1
testline2

假设文件名为 testFile.txt

我尝试运行 md5sum 的多种变体,看看是否可以使这些值等于无济于事。

$md5sum testFile.txt                     //22f877bcf8985a0f038a5b70086b955d
$echo -n $(cat testFile.txt) | md5sum    //1e192bb9877cc2f20e7010d499c0a306
$echo -E $(cat testFile.txt) | md5sum    //83b6873b79ca36952eb58ea05083c02e

$unix2dos testFile.txt  //converting file to dos just in case line endings are issue
$md5sum testFile.txt                     //d302436fa25c7faaab75ceca1f1df16d
$echo -n $(cat testFile.txt) | md5sum    //94f0c8f7e9820cb6eda9e911ee21b2a8
$echo -E $(cat testFile.txt) | md5sum    //f39452a70621ed225057073e86f17858

我已经为此工作了几个小时,似乎无法让这些 MD5 匹配。有任何想法吗?

4

2 回答 2

2

您的 testFile.txt 在第二行的末尾有一个换行符,而您的 .NET 代码没有在第二行的末尾放置一个换行符。如果您通过 运行文件xxd,您将能够看到让您绊倒的额外换行符。

于 2013-05-05T01:25:30.350 回答
0

这可能是由于每个操作系统上的换行符不同。

请参阅此处了解如何转换其中一个文件以匹配另一个文件的换行符,我敢打赌您的校验和将匹配:http ://en.wikipedia.org/wiki/Newline#Conversion_utilities

于 2013-05-05T01:25:11.327 回答