Ne pas obtenir une correspondance sha1 dans ma conversion de code C # vers PHP, que me manque-t-il?

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

Question

J'essaie de comprendre cela pour pouvoir faire quelque chose de similaire. Je sais:

buf contient une clé d'authentification avec un hachage ajouté (les 20 derniers octets) Le HashData qui est recherché dans la MachineKeySection est 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;
    }
}

Voici ce que je pense qui se passe: Nous hachaisons tout sauf les 20 derniers octets de buf. Ensuite, nous comparons, un octet à la fois, le hachage que nous venons de créer au hachage ajouté aux 20 derniers octets de buf.

Donc, en PHP, j'essaie ceci:

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

Et l'étape suivante consiste à comparer. Mais quand je fais écho à la sortie de $ hash et sha1 ($ ticket), ils ne correspondent pas, donc je ne me suis même pas soucié de les comparer dans le code.

Était-ce utile?

La solution

Par défaut, la fonction sha1 () de php renvoie un nombre hexadécimal de 40 caractères. Vous devez demander explicitement le format binaire 20 octets si vous le souhaitez

$hash = sha1( $ticket, true );

Autres conseils

$ticket = substr($decrypthex, 0, -20);
$hash = substr($decrypthex, -20);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top