2010-01-27 8 views
23

Utilizando C#, quiero crear un hash MD5 de un archivo de texto. ¿Cómo puedo lograr esto? Por favor incluya el código. ¡Muchas gracias!¿Cómo creo un resumen de hash MD5 desde un archivo de texto?

Actualización: Gracias a todos por su ayuda. Finalmente me decidí por el siguiente código:

// Create an MD5 hash digest of a file 
public string MD5HashFile(string fn) 
{    
    byte[] hash = MD5.Create().ComputeHash(File.ReadAllBytes(fn)); 
    return BitConverter.ToString(hash).Replace("-", "");    
} 
+0

Hoy en día es mejor evitar MD5 como lo ha conocido vulnerabilidades https://en.wikipedia.org/wiki/MD5 –

Respuesta

16

Aquí está la rutina que estoy usando actualmente.

using System.Security.Cryptography; 

    public string HashFile(string filePath) 
    { 
     using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      return HashFile(fs); 
     } 
    } 

    public string HashFile(FileStream stream) 
    { 
     StringBuilder sb = new StringBuilder(); 

     if(stream != null) 
     { 
      stream.Seek(0, SeekOrigin.Begin); 

      MD5 md5 = MD5CryptoServiceProvider.Create(); 
      byte[] hash = md5.ComputeHash(stream); 
      foreach(byte b in hash) 
       sb.Append(b.ToString("x2")); 

      stream.Seek(0, SeekOrigin.Begin); 
     } 

     return sb.ToString(); 
    } 
+0

Eso es roufamatic perfecto. ¿Devuelve un hexágono de 32 dígitos? –

+1

@CraigS: preguntar (o leer) el código ...;) – Lucero

+1

Devuelve una cadena de hexadecimal. – roufamatic

10

Corto y al grano. filename es el nombre de su archivo de texto:

using (var md5 = MD5.Create()) 
{ 
    return BitConverter.ToString(md5.ComputeHash(File.ReadAllBytes(filename))).Replace("-", ""); 
} 
+4

ToBase64String no devuelve lo que quiero. Sin embargo, BitConverter.ToString alrededor de la matriz de bytes hace el truco –

1
internal static string GetHashCode(string filePath, HashAlgorithm cryptoService) 
{ 
// create or use the instance of the crypto service provider 
// this can be either MD5, SHA1, SHA256, SHA384 or SHA512 
using (cryptoService) 
{ 
    using (var fileStream = new FileStream(filePath, 
              FileMode.Open, 
              FileAccess.Read, 
              FileShare.ReadWrite)) 
    { 
     var hash = cryptoService.ComputeHash(fileStream); 
     var hashString = Convert.ToBase64String(hash); 
     return hashString.TrimEnd('='); 
    } 
    } 
} 


    WriteLine("MD5 Hash Code : {0}", GetHashCode(FilePath, new MD5CryptoServiceProvider())); 
    WriteLine("SHA1 Hash Code : {0}", GetHashCode(FilePath, new SHA1CryptoServiceProvider())); 
    WriteLine("SHA256 Hash Code: {0}", GetHashCode(FilePath, new SHA256CryptoServiceProvider())); 
    WriteLine("SHA384 Hash Code: {0}", GetHashCode(FilePath, new SHA384CryptoServiceProvider())); 
    WriteLine("SHA512 Hash Code: {0}", GetHashCode(FilePath, new SHA512CryptoServiceProvider())); 
Cuestiones relacionadas