Question

Je ne pense pas avoir été suffisamment précis la dernière fois. On y va:

J'ai une chaîne hexagonale:

  

742713478fb3c36e014d004100440041004   e0041004e00000060f347d15798c9010060   6b899c5a98c9014d007900470072006f007   500700000002f0000001f7691944b9a3306   295fb5f1f57ca52090d35b50060606060606

Les 20 derniers octets devraient (théoriquement) contenir un hachage SHA1 de la première partie (chaîne complète - 20 octets). Mais cela ne correspond pas pour moi.

Essayer de faire cela avec PHP, mais pas de chance. Pouvez-vous obtenir un match?

Ticket:

  

742713478fb3c36e014d004100   440041004e0041004e00000060   f347d15798c90100606b899c5a   98c9014d007900470072006f00   7500700000002f0000001f7691944b9a

sha1 hash du ticket ajouté à l'original:

  

3306295fb5f1f57ca52090d35b50060606060606

Mon sha1 de hachage de ticket:

  

b6ecd613698ac3533b5f853bf22f6eb4afb94239

Voici ce qui est dans le ticket et comment il est stocké. FWIW, je peux extraire le nom d'utilisateur, etc., et repérer les différents délimiteurs. http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/Auth_Internals/AuthTicket2. JPG

Modifié: j'ai découvert que la chaîne est complétée à la fin par la fonction de déchiffrement qu'elle effectue avant ce point. J'ai supprimé les 6 derniers octets et ajusté par ticket et hash en conséquence. Cela ne fonctionne toujours pas, mais je suis plus proche.

Était-ce utile?

La solution

Votre ticket est calculé sur la chaîne hexadécimale elle-même. Peut-être que le hachage ajouté est calculé sur une autre représentation des mêmes données?

Autres conseils

Je pense que vous avez du mal à comprendre les octets par rapport aux caractères.

En interne, php stocke chaque caractère d'une chaîne sous forme d'octet. Le hash sha1 généré par PHP est une représentation hexadécimale de 40 caractères (40 octets) des données binaires de 20 octets, chaque valeur binaire devant être représentée par 2 caractères hexadécimaux.

Je ne suis pas sûr que ce soit la source réelle de votre divergence, mais voir ce malentendu me fait me demander si c'est lié.

Essayez de couper la chaîne en premier, il est étonnamment facile d’avoir une nouvelle ligne ou un espace à la fin qui modifie complètement le hachage.

Selon cet outil SHA1 en ligne , le hachage du texte donné (après suppression du nouveau lignes et espaces) est

b6ecd613698ac3533b5f853bf22f6eb4afb94239

Idée: assurez-vous que vous entrez des caractères et non un nombre hexadécimal dans la version PHP.

Le problème était que l'original était un hachage à clé. Je devais utiliser hash_hmac () avec une clé de validation plutôt que sha1 () sans.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top