Page 1 sur 1

Demande d'aide pour devellopement de fonction HMAC MD5

Publié : lun. 24/sept./2012 21:40
par caussatjerome
Salut tous le monde, je suis nouveau sur le forum, je suis passionner de cryptographie,
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
J'ai été sur le site http://membres.multimania.fr/brudav/hash.php pour verifier, et je n'est pas le même résultat.
Quelqu'un peu me dire ou est mon erreur dans mon code ?

Re: Demande d'aide pour devellopement de fonction HMAC MD5

Publié : lun. 24/sept./2012 21:46
par caussatjerome
oups, je viens de remarquer un problème dans la procedure hextoasc : voiçi le code corriger :

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

Re: Demande d'aide pour devellopement de fonction HMAC MD5

Publié : lun. 24/sept./2012 23:13
par Backup
remet ton code entre les balises

Code : Tout sélectionner

 et [/code ]

evite le Vert sur fond blanc , perso, je vois rien ...

tu as un bouton éditer sur chacun de tes messages 

donc, si tu veux corriger une procedure , ou autre, utilise le , au lieu d'ajouter un message



bienvenue.. :)

Re: Demande d'aide pour devellopement de fonction HMAC MD5

Publié : mar. 25/sept./2012 0:31
par caussatjerome
Merci, Dobro :)

Re: Demande d'aide pour devellopement de fonction HMAC MD5

Publié : jeu. 09/mai/2013 10:30
par caussatjerome
Voici mon code corriger et fonctionnel :

Code : Tout sélectionner

Procedure.s hextoasc(entrer.s)
For a = 1 To Len(entrer.s) Step 2
sortie.s+Chr(Val("$"+Mid(entrer.s,a,2)))
Next a
ProcedureReturn sortie.s
EndProcedure

Procedure.s hmac_md5(key.s,msg.s)
If(Len(key.s)>64); Si key est plus grand que 64 octets...
key.s=MD5Fingerprint(@key.s,Len(key.s))
key.s=hextoasc(key.s)
EndIf
key.s=LSet(key.s,64,Chr(0));Il faut que la clef soit de 64 octets, on ajoute donc autant de fois que necessaire le caractères ASCII 0.
ipad.s=LSet(ipad.s,64,Chr($36));On prépare la variable ipad (64 fois le caractère $36)
opad.s=LSet(opad.s,64,Chr($5c));On prépare la variable opad (64 fois le caractère $5c)
For a=1 To 64
opadt.s+Chr(Asc(Mid(opad,a,1))!Asc(Mid(key,a,1))); on prépare la variable opadt (opad XOR key)
ipadt.s+Chr(Asc(Mid(ipad,a,1))!Asc(Mid(key,a,1))); on prépare la variable ipadt (ipad XOR key)
Next a
ipadt.s+msg.s;on ajoute le message a ipad.
hipad.s=MD5Fingerprint(@ipadt.s,Len(ipadt.s))
opadt.s+hextoasc(hipad.s)
hopad.s=MD5Fingerprint(@opadt.s,80)
ProcedureReturn hopad.s
EndProcedure

key$=InputRequester("Programme de test HMAC MD5 :","KEY :","")
Message$=InputRequester("Programme de test HMAC MD5 :","Message :","")
MessageRequester("Resultat :",hmac_md5(key$,message$))
End
N'hésitez pas à faire des suggestions, remarques, et autres... Bon codage à tous !

Re: Demande d'aide pour devellopement de fonction HMAC MD5

Publié : mar. 14/mai/2013 10:24
par Kwai chang caine
Bienvenue et merci de tes deux codes de cryptage 8)
je suis passionner de cryptographie
Et ben t'as une passion pas facile...mais passionante 8O

Re: Demande d'aide pour devellopement de fonction HMAC MD5

Publié : mar. 14/mai/2013 10:52
par caussatjerome
Je t'en prie, sa me fait plaisir, sa peut servir :) (Exemple serveur SMTP Authententification CRAM-MD5 ou encore Serveur HTTP Authentification DIGEST).
Une passion pas évidente, sa c'est clair ! ;) mais j'aime les défis !