3

前回は十分に具体的ではなかったと思います。どうぞ:

私は16進文字列を持っています:

742713478fb3c36e014d004100440041004 e0041004e00000060f347d15798c9010060 6b899c5a98c9014d007900470072006f007 500700000002f0000001f7691944b9a3306 295fb5f1f57ca52090d35b50060606060606

最後の 20 バイトには、(理論的には) 最初の部分の SHA1 ハッシュが含まれている必要があります (完全な文字列 - 20 バイト)。でも、私には似合いません。

PHPでこれをやろうとしていますが、うまくいきません。試合はできますか?

チケット:

742713478fb3c36e014d004100 440041004e0041004e00000060 f347d15798c90100606b899c5a 98c9014d007900470072006f00 7500700000002f1f7b9a914f0000914

元のチケットに追加されたチケットの sha1 ハッシュ:

3306295fb5f1f57ca52090d35b50060606060606

チケットの私のsha1ハッシュ:

b6ecd613698ac3533b5f853bf22f6eb4afb94239

チケットの内容と保管方法は次のとおりです。FWIW、ユーザー名などを引き出して、さまざまな区切り記号を見つけることができます。 http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/AuthTicket2.JPG

編集: 文字列がこの時点より前に通過する復号化関数によって最後にパディングされていることを発見しました。最後の 6 バイトを削除し、それに応じてチケットとハッシュで調整しました。まだうまくいきませんが、私は近づいています。

4

5 に答える 5

5

チケットは 16 進文字列自体で計算されています。追加されたハッシュは、同じデータの別の表現で計算されるのでしょうか?

于 2009-03-03T17:18:35.337 に答える
4

バイトと文字について混乱していると思います。

内部的に、php は文字列内のすべての文字をバイトとして格納します。PHP が生成する sha1 ハッシュは、20 バイトのバイナリ データの 40 文字 (40 バイト) の 16 進数表現です。これは、各バイナリ値を 2 つの 16 進数文字で表す必要があるためです。

これがあなたの食い違いの本当の原因かどうかはわかりませんが、この誤解を見ると、それが関係しているのではないかと思います.

于 2009-03-03T17:30:47.287 に答える
1

このオンライン SHA1 ツールによると、指定されたテキストのハッシュ (新しい行とスペースを削除した後) は次のとおりです。

b6ecd613698ac3533b5f853bf22f6eb4afb94239

アイデア: 入力文字が PHP バージョンの 16 進数でないことを確認してください。

于 2009-03-03T17:40:34.503 に答える