英雄联盟更新包md5校验失败:计算文件的 MD5校验和(windows iso hash checker)

关于英雄联盟更新包md5校验失败的问题,在windows iso hash checker中经常遇到, 我正在使用iTextSharp从 PDF 文件中读取文本。但是,有时我无法提取文本,因为 PDF 文件仅包含图像。我每天下载相同的 PDF 文件,我想看看 PDF 是否已被修改。如果无法获得文本和修改日期,则MD5校验和是判断文件是否已更改的最可靠方法吗?

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

如果是这样,一些代码样本将不胜感激,因为我没有太多的经验与加密。

907

使用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();
        }
    }
}
74

这是我怎么做:

using System.IO;
using System.Security.Cryptography;
public string checkMD5(string filename)
{
    using (var md5 = MD5.Create())
    {
        using (var stream = File.OpenRead(filename))
        {
            return Encoding.Default.GetString(md5.ComputeHash(stream));
        }
    }
}
10

我知道这个问题已经回答了,但这是我使用的:

using (FileStream fStream = File.OpenRead(filename)) {
    return GetHash<MD5>(fStream)
}

其中GetHash

public static String GetHash<T>(Stream stream) where T : HashAlgorithm {
    StringBuilder sb = new StringBuilder();
    MethodInfo create = typeof(T).GetMethod("Create", new Type[] {});
    using (T crypt = (T) create.Invoke(null, null)) {
        byte[] hashBytes = crypt.ComputeHash(stream);
        foreach (byte bt in hashBytes) {
            sb.Append(bt.ToString("x2"));
        }
    }
    return sb.ToString();
}

可能不是最好的方法,但它可以方便。

4

这是我发现的一个稍微简单的版本,它一次性读取整个文件,只需要一个using指令。

byte[] ComputeHash(string filePath)
{
    using (var md5 = MD5.Create())
    {
        return md5.ComputeHash(File.ReadAllBytes(filePath));
    }
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(710)
5i66网页游戏平台:同一网页上的多个 javascript/jquery脚本
上一篇
A ili:TFTLCDILI9486和 STM32
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(48条)