Рассчитать контрольную сумму MD5 для файла
Я использую iTextSharp для чтения текста из файла PDF. Однако иногда я не могу извлечь текст, потому что PDF-файл содержит только изображения. Я загружаю одни и те же PDF-файлы каждый день, и я хочу посмотреть, был ли изменен PDF. Если текст и дата изменения не могут быть получены, является MD5 контрольная сумма самый надежный способ узнать, изменился ли файл?
Если это так, некоторые примеры кода будут оценены, потому что у меня нет большой опыт работы с криптографией.
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