C#からPHPへのコード変換でsha1の一致が得られないのですが、何が欠けていますか?

StackOverflow https://stackoverflow.com/questions/607017

質問

これを理解しようとしているので、似たようなことができます。知っています:

bufには、ハッシュが追加された認証キー(最後の20バイト)が含まれます MachineKeySectionで検索されているHashDataはSHA1です

length -= 20;
byte[] buffer2 = MachineKeySection.HashData(buf, null, 0, length);

for (int i = 0; i < 20; i++)
{
    if (buffer2[i] != buf[length + i])
    {
        return null;
    }
}

これは私が考えていることです: bufの最後の20バイトを除くすべてをハッシュしています。 次に、1バイトずつ、作成したハッシュとbufの最後の20バイトに追加されるハッシュを比較します。

したがって、PHPでこれを試しています:

//get the length of the ticket -20 bytes
$ticketLn = strlen($buf)-40;
//grab all but the last 20 bytes
$ticket = substr($decrypthex, 0, $ticketLn);
//create a hash of the ticket
$hash = substr($decrypthex, $ticketLn);

次のステップは比較です。しかし、$ hashとsha1($ ticket)の出力をエコーすると、それらは一致しないため、コードでそれらを比較することさえしませんでした。

役に立ちましたか?

解決

デフォルトでは、phpの sha1()関数は40文字の16進数を返します。必要な場合は、20バイトのバイナリ形式を明示的に要求する必要があります

$hash = sha1( $ticket, true );

他のヒント

$ticket = substr($decrypthex, 0, -20);
$hash = substr($decrypthex, -20);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top