Рассчитать контрольную сумму MD5 для файла



Я использую iTextSharp для чтения текста из файла PDF. Однако иногда я не могу извлечь текст, потому что PDF-файл содержит только изображения. Я загружаю одни и те же PDF-файлы каждый день, и я хочу посмотреть, был ли изменен PDF. Если текст и дата изменения не могут быть получены, является MD5 контрольная сумма самый надежный способ узнать, изменился ли файл?



Если это так, некоторые примеры кода будут оценены, потому что у меня нет большой опыт работы с криптографией.

637   5  

5 ответов:

Это очень просто с помощью

вот как я это делаю:

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));
        }
    }
}

Я знаю, что на этот вопрос уже был дан ответ, но это то, что я использую:

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

вероятно, не лучший способ, но это может быть удобно.

вот немного более простая версия, которую я нашел. Он читает весь файл за один раз и требует только одного

и если вам нужно вычислить MD5, чтобы увидеть, соответствует ли он MD5 большого двоичного объекта Azure, то этот вопрос и ответ SO могут быть полезны:MD5 хэш большого двоичного объекта, загруженного в Azure, не совпадает с тем же файлом на локальной машине

Comments

    Ничего не найдено.