PHP kodu dönüşüm benim C # bir sha1 maç almıyorum, ne eksik?

1 Cevap

Ben benzer bir şey yapabilirsiniz böylece bu anlamaya çalışıyorum. Biliyorum:

buf contains an authentication key with a hash appended to it (the last 20 bytes) The HashData that's being looked up in the MachineKeySection is 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;
    }
}

Here's what I think is happening: We are hashing all but the last 20 bytes of buf. Then we are, 1 byte at a time, comparing the hash we just created to the hash that is appended on to the last 20 bytes of buf.

Yani PHP bu çalışıyorum:

//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);

Ve bir sonraki adım karşılaştırmaktır. Ben $ karma ve SHA1 ($ bileti) çıktı echo Ama onlar bile kod onları karşılaştırarak rahatsız değil bu yüzden uyuşmuyor.

1 Cevap

Varsayılan olarak, php en sha1() function, 40 karakter uzunluğunda onaltılık bir sayı verir. Bunu istediğiniz buysa açıkça 20-bayt ikili biçimi istemek zorunda

$hash = sha1( $ticket, true );