Demande d'aide pour devellopement de fonction HMAC MD5

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

Demande d'aide pour devellopement de fonction HMAC MD5

Message 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 ?
Dernière modification par caussatjerome le jeu. 09/mai/2013 10:05, modifié 2 fois.
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

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

Message 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
Dernière modification par Atlante le mer. 26/sept./2012 4:31, modifié 1 fois.
Raison : suppression vert et ajout balise code
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message 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.. :)
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

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

Message par caussatjerome »

Merci, Dobro :)
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

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

Message 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 !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

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

Message 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
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

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

Message 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 !
Répondre