2010-01-27 17 views
23

Mit C# möchte ich einen MD5-Hash einer Textdatei erstellen. Wie kann ich das erreichen? Bitte Code einfügen. Danke vielmals!Wie erstelle ich einen MD5-Hash-Digest aus einer Textdatei?

Update: Danke an alle für ihre Hilfe. Ich habe mich schließlich auf den folgenden Code festgelegt -

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

In diesen Tagen ist es besser, MD5 zu vermeiden, da es Schwachstellen bekannt https://en.wikipedia.org/wiki/MD5 –

Antwort

16

Hier ist die Routine, die ich derzeit verwende.

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

Das ist perfekt roufamatic. Gibt es ein 32-stelliges Hex zurück? –

+1

@CraigS: fragen (oder lesen) den Code ...;) – Lucero

+1

Es gibt eine Zeichenfolge von hex zurück. – roufamatic

10

Kurz und bündig. filename ist Ihr Name Text-Datei:

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

ToBase64String gibt nicht zurück, was ich will. BitConverter.ToString um das Byte-Array tut jedoch den Trick –

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())); 
Verwandte Themen