计算文件的 MD5 校验和

问题描述

使用System.Security.Cryptography.MD5非常简单:

using (var md5 = MD5.Create())
{
    using (var stream = File.OpenRead(filename))
    {
        return md5.ComputeHash(stream);
    }
}

(我相信 实际上 使用的 MD5 实现不需要被处理,但我可能仍然会这样做。)

之后如何比较结果取决于您;例如,您可以将字节数组转换为 base64,或直接比较字节。(请注意,数组不会覆盖Equals。使用 base64 更容易正确,但如果您真的只对比较哈希感兴趣,则效率会稍低。)

如果您需要将哈希表示为字符串,您可以使用以下命令将其转换为十六进制BitConverter

static string CalculateMD5(string filename)
{
    using (var md5 = MD5.Create())
    {
        using (var stream = File.OpenRead(filename))
        {
            var hash = md5.ComputeHash(stream);
            return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
        }
    }
}

解决方法

我正在使用iTextSharp从 PDF
文件中读取文本。但是,有时我无法提取文本,因为 PDF
文件只包含图像。我每天都下载相同的PDF文件,我想看看PDF是否被修改过。如果无法获得文本和修改日期,MD5校验和是否是判断文件是否已更改的最可靠方法?

如果是,一些代码示例将不胜感激,因为我没有太多的密码学经验。