如何为没有问号的控制台窗口格式化md5.ComputeHash

时间:2017-10-10 16:17:18

标签: c#

我有一个简单的代码来生成文件的校验和,以比较文件是否是新文件。

class Program
{
    static void Main(string[] args)
    {
        using (var md5 = MD5.Create())
        {
            using (var stream = File.OpenRead("output_log.txt"))
            {
                var checksum = BitConverter.ToString(md5.ComputeHash(stream))
                                           .Replace("-", "‌​")
                                           .ToLower();
                System.Diagnostics.Debug.WriteLine(checksum);
                Console.Write(checksum);
            }
        }
    }
}

输出:

Debug.WriteLine

  

88 A4 A7广告立方厘米分贝A7 31 25 A9 44 E0 75 44 86 7C

Console.Write

  

A4 ?? 88 ??广告?? A7 ??立方厘米??分贝?? A7 ?? 31 ?? 25 ?? A9 ?? E0 ?? 44 ?? 75 ?? 44 ?? 86 ?? 7C < / p>

我认为MD5摘要功能的输出是二进制字节序列,而不是可打印的字符串。

如何将md5摘要打印为人类可读的表示形式,作为Debug.WriteLine中的输出?

1 个答案:

答案 0 :(得分:0)

我无法确定为什么但是在BitConverter线之外进行替换会修复它。

var checksum = BitConverter.ToString(md5.ComputeHash(stream))                                               
                           .ToLower();
System.Diagnostics.Debug.WriteLine(checksum);
checksum = checksum.Replace("-", "");
Console.Write(checksum);

请参阅@Hans Passant对其原因的评论。摘要&#34;&#34;实际上用两个unicode字符替换字符。

控制台输出:

  

d41d8cd98f00b204e9800998ecf8427e

编辑:我的哈希字符串显然与你的不同,因为我们没有使用相同的文件,我会将其添加到答案中。