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

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 :



Console.Write :



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

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

最佳答案

我不能确定为什么但在 BitConverter 线之外进行替换修复了它。

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

请参阅@Hans Passant 关于此操作原因的评论。总结 ""实际上用两个 unicode 字符替换了该字符。

控制台输出:



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

10-08 19:25