2010-01-27 5 views
23

En utilisant C#, je veux créer un hachage MD5 d'un fichier texte. Comment puis-je accomplir cela? S'il vous plaît inclure le code. Merci beaucoup!Comment créer un condensé de hachage MD5 à partir d'un fichier texte?

Mise à jour: Merci à tous pour votre aide. J'ai finalement réglé sur le code suivant -

// 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

Ces jours-ci, il est préférable d'éviter MD5 car il a connu des vulnérabilités https://en.wikipedia.org/wiki/MD5 –

Répondre

16

Voici la routine que j'utilise actuellement.

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

C'est roufamatic parfait. Renvoie-t-il un hexagone à 32 chiffres? –

+1

@CraigS: demander (ou lire) le code ...;) – Lucero

+1

Il retourne une chaîne de caractères hexadécimaux. – roufamatic

10

Courte et précise. filename est le nom de votre fichier texte:

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

ToBase64String ne retourne pas ce que je veux. Cependant, BitConverter.ToString autour du tableau d'octets fait l'affaire –

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())); 
Questions connexes