C# MD5.ComputeHash 格式

C# MD5.ComputeHash format

我正在使用 C# 代码:

using (var md5 = MD5.Create())
{
    using (var fStream = File.OpenRead(fFile))
    {
        string Hash = BitConverter.ToString(md5.ComputeHash(fStream));
        fStream.Close();
        return Hash;
    }       
}

输出的格式是这样的:

41-D5-43-13-08-23-DE-18-71-56-A5-BA-46-55-0B-CF

我还使用了麻省理工学院的一个名为 rehash 的哈希程序(我认为) ReichlSoft 哈希计算器 (http://www.reichlsoft.de.vu),其哈希格式如下:

41D54313 0823DE18 7156A5BA 46550BCF

我希望能够使用 C# 代码而不是 rehash 控制台应用程序。我怎样才能获得与重新哈希控制台应用程序相同的哈希格式,以便我可以与遗留文件进行比较?

你总是可以这样做:

Hash = Hash.Replace("-", "");
           .Insert(7, " ")
           .Insert(16, " ")
           .Insert(25, " ");

使用一些帮助方法来格式化您的字符串:

public static string ByteArrayToString(byte[] ba, int delimiter)
{
    StringBuilder hex = new StringBuilder(ba.Length * 2);
    int count = 0;
    foreach (byte b in ba)
    {
        hex.AppendFormat("{0:x2}", b);
        count++;
        if (count % delimiter == 0)
        {
            hex.Append(" ");
        }
    }
    return hex.ToString().ToUpper().Trim();
}

并称它为:

ByteArrayToString(md5.ComputeHash(fStream), 4)

试试这个

public String GetHash(string fFile)
{
    var sb = new StringBuilder();   

    using (var md5 = MD5.Create())
    {
        using (var fStream = File.OpenRead(fFile))
        {
            var hash = md5.ComputeHash(fStream);
            for (int i = 0; i < hash.Length; i++)
                sb.Append(hash[i].ToString("X2"));

            fStream.Close();
        }    
    }
    return sb.ToString();
}
public bool Compare(string hash1, string hash2)
{
    return Regex.Replace(hash1, @"\s+", "") == Regex.Replace(hash2, @"\s+", "");
}