Voila mon problème : je veux créer une procédure de Hashage HMAC-MD5 ou HMAC-SHA160
J'ai récupéré la procédure sur le site Wikipedia (ou si quelqu'un comprend bien l'anglais: http://tools.ietf.org/html/rfc2104
La fonction HMAC est définie comme suit :
HMACk(m) = h ( ( K xor opad ) || h ( (k xor ipad ) || m ) )
avec :
h : une fonction de hachage itérative,
K : la clé secrète complétée avec des zéros pour qu'elle atteigne la taille de bloc de la fonction h
m : le message à authentifier,
"||" désigne une concaténation et XOR un ou exclusif,
ipad et opad, chacune de la taille d'un bloc, sont définies par : ipad = 0x363636...3636 et opad = 0x5c5c5c...5c5c. Donc, si la taille de bloc de la fonction de hachage est 512, ipad et opad sont 64 répétitions des octets, respectivement, 0x36 et 0x5c.
voiçi le code que j'ai develloper :
Code : Tout sélectionner
Procedure.s hextoasc(entrer.s)
For a = 1 To Len(entrer.s) Step 2
sortieasc.s="$"+Mid(entrer.s,a,2):sortie.s+Chr(Val(sortieasc.s))
Next a
ProcedureReturn sortie.s
EndProcedure
;ipad.s = Chr(Val("$36")) = decimal 54
;opad.s = Chr(Val("$5c")) = decimal 3164
;fonctionnement :
;partie interne :
;interne.s = hextoASC(MD5(XOR(key.s,ipad.s)+message.s)) si key< 64, alors combles de chr(0)
;externe.s = MD5(XOR(key.s,opad.s)+internes.s)
key.s="azerty"
For a=1 To 64; Je prépare ipad.s et opad.s en même temp
n+1
If n<=Len(key.s):sortiei.s+Chr(Asc(Mid(key.s,n,1)) ! 54):Else:sortiei.s+Chr(0 ! 54):EndIf
If n<=Len(key.s):sortieo.s+Chr(Asc(Mid(key.s,n,1)) ! 3164):Else:sortieo.s+Chr(0 ! 3164):EndIf
Next a
message.s="test"
toto.s=sortiei.s+message.s
tata.s=sortieo.s+hextoasc(MD5Fingerprint(@toto.s,Len(toto.s)))
total.s=MD5Fingerprint(@tata.s,Len(tata.s))
Debug total.s
Quelqu'un peu me dire ou est mon erreur dans mon code ?