2013-05-01 4 views

答えて

17

MD5CryptoServiceProviderは、テキストベースのファイルとバイナリファイルで動作します。

byte[] myFileData = File.ReadAllBytes(myFileName); 
byte[] myHash = MD5.Create().ComputeHash(myFileData); 

または...あなたは大きなファイルで作業し、メモリにファイル全体をロードしない場合:あなたはEnumerable.SequenceEqualで二つのファイルからバイト配列に比較することができ

byte[] myHash; 
using (var md5 = MD5.Create()) 
using (var stream = File.OpenRead(myFileName)) 
    myHash = md5.ComputeHash(stream); 

myHash1.SequenceEqual(myHash2); 

また、CRC計算機を作成することもできます。参照してください:http://damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net

+1

ファイル全体をバイト配列に変換することは本当に必要ですか? – svick

+0

@svick:私は自分の答えを更新しました。入力いただきありがとうございます! –

+0

@MartinMulder、辞書を使ってハッシュを保存し、TryGetValueで比較することはできますか?))ハッシュのハッシュ)) –

4

あなたがより良い検索すべき;)

using System.IO; 
using System.Text; 
using System.Security.Cryptography; 


protected string GetMD5HashFromFile(string fileName) 
{ 
    FileStream file = new FileStream(fileName, FileMode.Open); 
    MD5 md5 = new MD5CryptoServiceProvider(); 
    byte[] retVal = md5.ComputeHash(file); 
    file.Close(); 

    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < retVal.Length; i++) 
    { 
    sb.Append(retVal[i].ToString("x2")); 
    } 
    return sb.ToString(); 
} 

このように、この機能にファイルを渡します。

GetMD5HashFromFile("text1.txt"); 
GetMD5HashFromFile("text2.txt"); 
+1

実際にバイト配列全体を文字列に変換する必要はありますか?私はちょうど2つのハッシュを比較するためにちょっとした仕事のようだ。 –

+2

'Close()'を明示的に呼び出すのではなく、ストリーム上で 'using'を使うべきです。 – svick