Не получается совпадение sha1 при преобразовании кода C# в PHP, что мне не хватает?

Я пытаюсь понять это, чтобы я мог сделать что-то подобное. Я знаю:

buf содержит ключ аутентификации с добавленным к нему хэшем (последние 20 байтов).

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;
    }
}

Вот что, как мне кажется, происходит: мы хэшируем все, кроме последних 20 байт buf. Затем мы по байту за раз сравниваем только что созданный хэш с хэшем, добавленным к последним 20 байтам buf.

Итак, в 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), они не совпадают, поэтому я даже не стал сравнивать их в коде.


person lynn    schedule 03.03.2009    source источник


Ответы (2)


По умолчанию функция php sha1() возвращает 40-символьное шестнадцатеричное число. Вы должны явно запросить 20-байтовый двоичный формат, если это то, что вы хотите

$hash = sha1( $ticket, true );
person Peter Bailey    schedule 03.03.2009

person    schedule
comment
Спасибо за лучший синтаксис, но все же не то, что мне нужно. - person lynn; 03.03.2009