PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Hash_hmac SHA1 ne correspond pas entre php et windev
Hash_hmac SHA1 ne correspond pas entre php et windev
Débuté par Gregory H, 26 mai 2015 10:58 - 6 réponses
Posté le 26 mai 2015 - 10:58
Bonjour,

Je ne trouve pas comment obtenir l'équivalent du code php suivant :
<?php
$chaine='s55shhjndfl';
$hmac=hash_hmac('sha1', $chaine, 'test');
var_dump($hmac); //string(40) "f10de51aa1da18df325fba1485134dd17b2f8277"
?>


Logiquement l'équivalent Wlanguage serait :

temp est une chaîne
res est une chaîne
md5 est un Buffer
temp = "s55shhjndfl"
md5 = HashChaîne(HA_HMAC_SHA_160 , temp, "test")
i est un entier
POUR i = 1 _A_ Taille(md5)
res += NumériqueVersChaîne(Asc(md5[[i]]),"02x")
FIN
Trace(res) //65a5c8422ca83fc64a9d1c0e3d71ca04ddfbc037


En PHP on obtiens : f10de51aa1da18df325fba1485134dd17b2f8277
avec HashChaine : 65a5c8422ca83fc64a9d1c0e3d71ca04ddfbc037

Je suis à court d'idées ! Avec un MD5 simple j'arrive au même résultat utilisant cette méthode, avec un sha1 pas du tout.

Avez-vous une piste ?

Merci
Membre enregistré
940 messages
Popularité : +66 (68 votes)
Posté le 26 mai 2015 - 11:31
bonjour,

obtiens biens la valeur php avec un Windev 18 ( 01F180063c )

vous êtes certain de ne pas avoir une faute de frappe ?
Membre enregistré
940 messages
Popularité : +66 (68 votes)
Posté le 26 mai 2015 - 11:32
peu être voir au niveau du format de vos chaines

c'est de l'ansi ou Unicode ?
Membre enregistré
940 messages
Popularité : +66 (68 votes)
Posté le 26 mai 2015 - 11:41
après vérif je pense que vous avez simplement un soucis de format de chaine, voici ce que j'obtiens :

temp_ansi est une chaîne ANSI
res_ansi est une chaîne ANSI
Sha_160_ansi est un Buffer
temp_ansi = "s55shhjndfl"
Sha_160_ansi = HashChaîne(HA_HMAC_SHA_160 , temp_ansi, "test")
Trace("HA_HMAC_SHA_160 (ANSI)")
i est un entier
POUR i = 1 _A_ Taille(Sha_160_ansi)
res_ansi+= NumériqueVersChaîne(Asc(Sha_160_ansi[[i]]),"02x")
FIN
Trace(res_ansi) //affiche f10de51aa1da18df325fba1485134dd17b2f8277

Temp_unicode est une chaîne UNICODE
Res_unicode est une chaîne UNICODE
Sha_160_unicode est un Buffer
Temp_unicode = "s55shhjndfl"
Sha_160_unicode = HashChaîne(HA_HMAC_SHA_160 , Temp_unicode, "test")
Trace("HA_HMAC_SHA_160 (UNICODE)")

POUR i = 1 _A_ Taille(Sha_160_unicode)
Res_unicode+= NumériqueVersChaîne(Asc(Sha_160_unicode[[i]]),"02x")
FIN
Trace(Res_unicode) //affiche 65a5c8422ca83fc64a9d1c0e3d71ca04ddfbc037


bon dèv
Membre enregistré
940 messages
Popularité : +66 (68 votes)
Posté le 26 mai 2015 - 11:48
vous pouvez aller voir dans la description de votre configuration courante,
l'onglet UNICODE

;)
Posté le 26 mai 2015 - 18:58
Merci Chris, je vais tester demain matin.

En tout cas super votre réponse avec le code, ça mets bien en évidence le souci de format de chaines. :merci:
Membre enregistré
173 messages
Popularité : +7 (7 votes)
Posté le 16 février 2016 - 11:41
Bonjour,

Quelqu'un a t-il trouvé une explication ou mieux une solution ?

--
Cordialement
Olivier DUCTEIL