9

現在、Python 3.2 プログラムを C# に変換するプロジェクトに取り組んでいます。

Python プログラムには、16 進数のみを含む倍長の文字列オブジェクトを返すコード行があります。

Python プログラムのコードは次のとおりです。

if sha1.hexdigest().upper() == hash_string:
    #do whatever

PythonのhashlibからC#でhexdigestに相当するものを見つけようとして失敗しました。

C# では、既に SHA1 ハッシュをバイト配列で取得していますが、hexdigest に相当するものを実行しようとしたすべてのメソッドは、hash_string との一致を提供できませんでした。これは、sha1 の hexdigest が一致する必要があるものです。

問題がhexdigestをエミュレートするために使用している方法なのか、そもそもsha1ハッシュを生成するために使用している方法なのかはわかりません.これにより、問題の考えられる原因を少なくとも 1 つ取り除くことができます。

hexdigest の代わりに現在使用している方法は次のとおりです。

string hexaHash = "";
foreach (byte b in sha1result)
{
    hexaHash += String.Format("{0:x2}", b);
}
string result = hexaHash;

編集:facepalm大丈夫です、私は自分の問題が何であるかを理解しました。Python で sha1 ハッシュを生成するとき、小文字の 16 進文字列から実行していました。私の C# では、大文字の 16 進文字列でした。したがって、私が使用している同等の hexdigest はそのままで問題ないと思います。人の時間を無駄にしてごめんなさい。

4

2 に答える 2

9
var hmac = BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
于 2016-12-13T07:07:56.543 に答える
3

HMACSHA1 クラスを使用して変換します。

于 2012-04-14T08:42:44.017 に答える