0

hash.ComputeHash 関数が C# .Net でどのように機能するか説明してください。

Mac サーバーの bash で .net hasing プログラムの動作をエミュレートしようとしていますが、結果が異なります。

.Net コード:

 Byte[] z = System.Text.Encoding.UTF8.GetBytes("1B-F5");
 string myhash1 = BitConverter.ToString(hash.ComputeHash(z)); 
 string myhash2 = BitConverter.ToString(hash.ComputeHash(hash.ComputeHash(z)));

戻り値:

myhash1 = "EF-83-00-69-6F-22-7C-1C-9C-84-C3-66-06-06-A5-12-A0-C7-91-B5"
myhash2 = "D3-5C-95-AD-2D-9E-5A-49-D0-D8-2B-4F-A5-F9-9A-6F-02-EA-8C-83"

問題は、bash スクリプトで Second has 値 (二重ハッシュされている) を取得できないことです。

バッシュ:

echo -n "1B-F5" | openssl sha1

ただし、正しい最初のハッシュ値(「-」文字を除く)を提供します

echo -n "1B-F5" | openssl sha1 | openssl sha1

まったく異なるハッシュを提供します。これは、C# コードが文字列ではなくバイト配列をハッシュしているためだと思われます。

とにかくbashで同じ出力を得ることができますか?

4

2 に答える 2

2

2 番目のハッシュ ステップを文字列に変換してから、それをハッシュしてみてください。あなたが得るものを参照してください。これで、 - オクテット区切りもハッシュしていることに注意してください。

byte[] z = System.Text.Encoding.UTF8.GetBytes("1B-F5");
string myhash1 = BitConverter.ToString(hash.ComputeHash(z)); 

z = System.Text.Encoding.UTF8.GetBytes(myhash1);
string myhash2 = BitConverter.ToString(hash.ComputeHash(z));
于 2013-01-14T16:17:52.943 に答える
0

結果をオンラインSHA1ツールの結果と比較すると 、文字列「1B-F5」が正しくハッシュされていることがわかります。2バイトの配列をハッシュしようとしているのではないかと思います。

もう1つの可能性は、最初のハッシュのバイト配列を文字列に変換し、その文字列をハッシュする必要がある場合です。

于 2013-01-14T16:18:39.763 に答える