winmd5 verificar usar saber comprobar como archivo c# .net hash md5

c# - usar - verificar crc



Calcular la suma de comprobaciĆ³n MD5 para un archivo (5)

Aquí hay una versión un poco más simple que encontré. Lee todo el archivo de una sola vez y solo requiere una única directiva de using .

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

Estoy usando iTextSharp para leer el texto de un archivo PDF. Sin embargo, hay veces que no puedo extraer texto, porque el archivo PDF solo contiene imágenes. Descargo los mismos archivos PDF todos los días y quiero ver si el PDF se ha modificado. Si no se puede obtener el texto y la fecha de modificación, ¿es una suma de comprobación MD5 la forma más confiable de saber si el archivo ha cambiado?

De ser así, se apreciarían algunos ejemplos de código, porque no tengo mucha experiencia con la criptografía.


Así es como lo hago:

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


Es muy simple usar System.Security.Cryptography.MD5 :

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

(Creo que, en realidad, la implementación de MD5 utilizada no necesita ser eliminada, pero es probable que aún así lo haga).

Cómo comparas los resultados después depende de ti; puede convertir la matriz de bytes a base64 por ejemplo, o comparar los bytes directamente. (Tenga en cuenta que las matrices no anulan a Equals . Usar base64 es más fácil de hacer bien, pero un poco menos eficiente si está realmente interesado en comparar los hashes).

Si necesita representar el hash como una cadena, puede convertirlo en hexadecimal utilizando 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(); } } }


Sé que esta pregunta ya fue respondida, pero esto es lo que uso:

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

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

Probablemente no sea la mejor manera, pero puede ser útil.