2017-01-12 7 views
1

Iは、C#のコードを使用しています:C#MD5.ComputeHashフォーマット

using (var md5 = MD5.Create()) 
{ 
    using (var fStream = File.OpenRead(fFile)) 
    { 
     string Hash = BitConverter.ToString(md5.ComputeHash(fStream)); 
     fStream.Close(); 
     return Hash; 
    }  
} 

出力の形式は次のようである:

41 D5-43-13-08-23- DE-18-71-56-A5-BA-46-55-0B-CF

私はまた、ハッシュをフォーマットMIT(と思う) ReichlSoftハッシュ計算(http://www.reichlsoft.de.vu)からの焼き直しと呼ばれるハッシュプログラムを使用このように:

41D54313 0823DE18 7156A5BA 46550BCF

私はC#のコードの代わりに焼き直しコンソールアプリケーションを使用できるようにしたいです。レガシーファイルと比較できるように、再ハッシュコンソールアプリケーションと同じハッシュフォーマットを実現するにはどうすればよいですか?

あなたはいつもちょうどこの行うことができます
+0

もしあなたがそれを置くフォーマットが気に入らなければ、 'BitConverter.ToString'を使わないかもしれませんか?または、ハイフンを取り除く/手動でスペースを追加する? – TZHX

+3

'md5.ComputeHash'は' Byte [] 'を返します。 'BitConverter'を使うのではなく、' ToString( "X2") 'などで4のグループで自分自身を単純にフォーマットします。 –

+4

' fStream.Close'を呼び出す必要はありません。 'using'ブロック。 – Lee

答えて

4

あなたの文字列をフォーマットするためにいくつかの助けメソッドを使用します。

public static string ByteArrayToString(byte[] ba, int delimiter) 
{ 
    StringBuilder hex = new StringBuilder(ba.Length * 2); 
    int count = 0; 
    foreach (byte b in ba) 
    { 
     hex.AppendFormat("{0:x2}", b); 
     count++; 
     if (count % delimiter == 0) 
     { 
      hex.Append(" "); 
     } 
    } 
    return hex.ToString().ToUpper().Trim(); 
} 

そして、それを呼び出す:

ByteArrayToString(md5.ComputeHash(fStream), 4) 
+1

最後に余分なスペースが追加されます。 (修正するのが簡単なはずです) –

+0

@ManfredRadlwimmerありがとう、私はそれを見たことがない、私はちょうど全体の文字列に、トリムを追加しました –

+0

これは完全に働いた。 – PigsIncorporated

1

Hash = Hash.Replace("-", ""); 
      .Insert(7, " ") 
      .Insert(16, " ") 
      .Insert(25, " "); 
+0

これは、 '41D54313 083DE18 7156A5BA 46550BCF'(スペースなし)ではなく、' 41D543130823DE187156A5BA46550BCF'となります –

+0

@ManfredRadlwimmer何が違うのですか?とにかく、ハッシュは文字列として書式を設定するのではなく、* bytes *です。文字をグループ化したい場合、それを行うには多くの方法があります。 –

+0

@PanagiotisKanavosあなたがそれらをフォーマットする方法は、この質問の全体のポイントです。 –

0

これを試してみてくださいを
public String GetHash(string fFile) 
{ 
    var sb = new StringBuilder(); 

    using (var md5 = MD5.Create()) 
    { 
     using (var fStream = File.OpenRead(fFile)) 
     { 
      var hash = md5.ComputeHash(fStream); 
      for (int i = 0; i < hash.Length; i++) 
       sb.Append(hash[i].ToString("X2")); 

      fStream.Close(); 
     }  
    } 
    return sb.ToString(); 
} 
public bool Compare(string hash1, string hash2) 
{ 
    return Regex.Replace(hash1, @"\s+", "") == Regex.Replace(hash2, @"\s+", ""); 
} 
関連する問題