2009-08-28 11 views
1

おはようございます、MD5ファイルの処理

私はMD5ファイルの整合性チェックツールでC#で作業しています。

MD5チェックサム値をファイルに与えるのにどれくらいの時間が必要ですか? たとえば、2GBの.mpgファイルを取得しようとすると、毎回約5分+かかることになります。 これは長すぎるようです。

私はちょっと待っていますか?以下は

は、私は任意の提案が理解されるであろう

public string getHash(String @fileLocation) 
    { 
     FileStream fs = new FileStream(@fileLocation, FileMode.Open); 

     HashAlgorithm alg = new HMACMD5(); 
     byte[] hashValue = alg.ComputeHash(fs); 

     string md5Result = ""; 

     foreach (byte x in hashValue) 
     { 
      md5Result += x; 
     }   

     fs.Close();   

     return md5Result;   
    } 

を実行しているコードです。

よろしく

+0

別の時間を、StringBuilderの代わりに、通常の文字列の連結を使用して:あなたは基本的にBufferedStreamFileStreamをラップし、よりHMACMD5.ComputeHash(Stream)過負荷にそれを養うために持っています。それはより速いwaaaayです:) – f2lollpll

答えて

7

は、最も効率的な方法でファイルのハッシュ値を計算する方法でthisを参照してください。

HashAlgorithm hmacMd5 = new HMACMD5(); 
byte[] hash; 

using(Stream fileStream = new FileStream(fileLocation, FileMode.Open)) 
    using(Stream bufferedStream = new BufferedStream(fileStream, 1200000)) 
     hash = hmacMd5.ComputeHash(bufferedStream); 
+0

こんにちはアントン、これは有望なようですが、あなたのソリューションを実装しようとするいくつかの問題があります。私は、BufferedStreamがFileStreamをラップし、両方とも独自のステートメントを使用していると考えていますか? また、あなたのソリューションでは、両方のクラスが同じ変数 'ストリーム'を使用しているわけではありません。ダブルチェックするには、これは正しいですか? VC#はこれについて不平を言った。 よろしくです。 – Ric

+0

@Ric:私の答えを編集しました。それが役立つかどうかを見てください。 –

+0

@Anton - 素晴らしく、完璧に機能します。ありがとう – Ric