Frage

Ich versuche, dies zu verstehen, so kann ich etwas Ähnliches tun. Ich weiß:

buf enthält einen Authentifizierungsschlüssel mit einem Hash angehängt (die letzten 20 Bytes) Die HashData, die in der MachineKeySection nachgeschlagen Sein ist 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;
    }
}

Hier ist, was ich denke, geschieht: Wir sind Hashing alle bis auf die letzten 20 Bytes von buf. Dann sind wir, 1 Byte zu einem Zeitpunkt, den Hash vergleichen wir nur mit dem Hash erstellt, die auf den letzten 20 Bytes von buf angehängt wird.

So in PHP Ich versuche dies:

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

Und der nächste Schritt ist, zu vergleichen. Aber wenn ich die Ausgabe von $ hash und SHA1-Echo ($ Ticket) sie nicht überein, so habe ich nicht einmal die Mühe gemacht, sie in Code zu vergleichen.

War es hilfreich?

Lösung

In der Standardeinstellung PHP SHA1 () Funktion eine hexadezimale Zahl 40 Zeichen zurückgibt. Sie haben explizit die 20-Byte-Binär-Format zu verlangen, wenn das, was Sie wollen

$hash = sha1( $ticket, true );

Andere Tipps

$ticket = substr($decrypthex, 0, -20);
$hash = substr($decrypthex, -20);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top