2009-03-03 3 views
0

J'essaie de comprendre ceci afin que je puisse faire quelque chose de similaire. Je sais:Je n'ai pas de correspondance sha1 dans ma conversion de code C# en PHP, qu'est-ce qui me manque?

buf contient une clé d'authentification avec un hachage ajouté à la fin (les 20 derniers octets) Le HashData qui est examiné dans le 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 sommes le hachage tout sauf les 20 derniers octets de buf. Ensuite, nous sommes, 1 octet à la fois, en comparant le hachage que nous venons de créer au hachage qui est 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 n'ai même pas pris la peine de les comparer en code.

Répondre

2

Par défaut, sha1() function PHP renvoie un nombre hexadécimal à 40 caractères. Vous devez demander explicitement le format binaire de 20 octets si c'est ce que vous voulez

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

Merci pour la meilleure syntaxe, mais toujours pas ce dont j'ai besoin. – lynn

Questions connexes