2009-03-03 3 views
0

私はこれを理解しようとしているので、私は似たようなことをすることができます。私が知っている:MachineKeySectionで検索されていますが追加ハッシュ(最後の20バイト) HashDataと認証キーが含まれているbufに私のC#でPHPコード変換にsha1の一致が得られません。何が欠けていますか?

は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)の出力をエコーすると、一致しないので、コードで比較することさえ気にしませんでした。

答えて

2

デフォルトでは、phpのsha1() functionは40文字の16進数を返します。あなたが望むなら、明示的に20バイトのバイナリ形式を要求しなければなりません。

$hash = sha1($ticket, true); 
1
$ticket = substr($decrypthex, 0, -20); 
$hash = substr($decrypthex, -20); 
+0

私はより良い構文をありがとうがありません。 – lynn

関連する問題