2010-01-27 63 views
23

使用C#,我想創建一個文本文件的MD5散列。我怎樣才能做到這一點?請包含代碼。非常感謝!如何從文本文件創建MD5哈希摘要?

更新:感謝大家的幫助。我終於解決了以下代碼 -

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

這些天,最好避免MD5,因爲它已已知漏洞https://en.wikipedia.org/wiki/MD5 – 2017-06-30 08:54:19

回答

16

這是我正在使用的例程。

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

這是完美的roufamatic。它是否返回一個32位的十六進制? – 2010-01-27 21:46:47

+1

@CraigS:詢問(或讀取)代碼...;) – Lucero 2010-01-27 21:51:50

+1

它返回一個十六進制字符串。 – roufamatic 2010-01-27 21:54:09

10

簡而言之, filename是文本文件的名稱:

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

ToBase64String不會返回我想要的。但是,字節數組周圍的BitConverter.ToString可以做到這一點 – 2010-01-28 03:01:40

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