Page 1 sur 1
MAJ routine md5 ?? incompatible??
Publié : dim. 08/nov./2015 0:46
par caussatjerome
La nouvelle version de pb rend incompatible ma fonction... et je n'arrive pas a convertire avec les nouvelle routine, quelqu'un peut m'aider ?
Code : Tout sélectionner
UseMD5Fingerprint()
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=StringFingerprint(key.s, #PB_Cipher_MD5,#PB_Ascii)
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=StringFingerprint(ipadt.s, #PB_Cipher_MD5,#PB_Ascii)
opadt.s+hextoasc(hipad.s)
hopad.s=StringFingerprint(opadt.s, #PB_Cipher_MD5,#PB_Ascii)
ProcedureReturn hopad.s
EndProcedure
key.s=InputRequester("Programme de test HMAC MD5 :","KEY :","")
Message.s=InputRequester("Programme de test HMAC MD5 :","Message :","")
MessageRequester("Resultat :",hmac_md5(key.s,message.s))
End
pour expliquer je suis sûre qu'il y a un problème car si j'utilise un calculateur de HMAC MD5 en ligne il ne me retourne pas le même résutat :
Calculateur en ligne
Re: MAJ routine md5 ?? incompatible??
Publié : dim. 08/nov./2015 1:19
par falsam
Qu'est ce qui ne va pas ?
Re: MAJ routine md5 ?? incompatible??
Publié : dim. 08/nov./2015 11:14
par GallyHC
Bonjour,
Je vais faire mon rabat joie, ce n’est pas possible de mettre un code à peu près "propre" et avec un minimum d’indentation ? La, cela fait un bloque illisible.
Cordialement,
GallyHC
Re: MAJ routine md5 ?? incompatible??
Publié : dim. 08/nov./2015 11:25
par GallyHC
Bonjour,
Je ne sais pas si comme ça, cela donne ce que tu veux mais bon voila.
Code : Tout sélectionner
DisableASM
EnableExplicit
UseMD5Fingerprint()
Procedure.s hextoasc(entrer.s)
;
Protected.i a
Protected.s sortie
For a = 1 To Len(entrer.s) Step 2
sortie + Chr(Val("$"+Mid(entrer.s,a,2)))
Next a
;
ProcedureReturn sortie
EndProcedure
Procedure.s hmac_md5(key.s,msg.s)
;
Protected.i a
Protected.s ipad, opad, opadt, ipadt, hipad, hopad
If(Len(key.s)>64); Si key est plus grand que 64 octets...
key = StringFingerprint(key.s, #PB_Cipher_MD5,#PB_Ascii)
key = hextoasc(key.s)
EndIf
key = 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 = LSet(ipad.s,64,Chr($36));On prépare la variable ipad (64 fois le caractère $36)
opad = LSet(opad.s,64,Chr($5c));On prépare la variable opad (64 fois le caractère $5c)
For a=1 To 64
opadt + Chr(Asc(Mid(opad,a,1))!Asc(Mid(key,a,1))); on prépare la variable opadt (opad XOR key)
ipadt + Chr(Asc(Mid(ipad,a,1))!Asc(Mid(key,a,1))); on prépare la variable ipadt (ipad XOR key)
Next a
ipadt + msg.s;on ajoute le message a ipad.
hipad = StringFingerprint(ipadt.s, #PB_Cipher_MD5,#PB_Ascii)
opadt + hextoasc(hipad.s)
hopad = StringFingerprint(opadt.s, #PB_Cipher_MD5,#PB_Ascii)
;
ProcedureReturn hopad.s
EndProcedure
Define.s key, Message
key = InputRequester("Programme de test HMAC MD5 :","KEY :","")
Message = InputRequester("Programme de test HMAC MD5 :","Message :","")
MessageRequester("Resultat :",hmac_md5(key,message))
End
Mais déjà une erreur du surement a ce que j'ai dit avant : Tu déclare "Key$" et dans le "MessageRequester", tu utilise "key.s". Déclare tes variables une fois et tu auras moins de problème, sans oublier d'utilisé "EnableExplicit", qui t'obligera a bien déclarer tes variables.
key$=InputRequester("Programme de test HMAC MD5 :","KEY :","")
MessageRequester("Resultat :",hmac_md5(key.s,message$))
Ce n'est donc pas la fonction en cause.
Cordialement,
GallyHC
Re: MAJ routine md5 ?? incompatible??
Publié : dim. 08/nov./2015 13:10
par falsam
GallyHC a écrit :Je vais faire mon rabat joie
Oui tu l'as fait
falsam a écrit :ce n’est pas possible de mettre un code à peu près "propre" et avec un minimum d’indentation ? La, cela fait un bloque illisible.
Ctrl+A et Ctrl+i pour un bon formatage du code et ça prend 2 secondes Gally. Bon ok il aurait pu le faire.
GallyHC a écrit :Cordialement
Heureusement que tu le dis
A part ça bravo pour le coup d'oeil
GallyHC a écrit :Mais déjà une erreur du surement a ce que j'ai dit avant : Tu déclare "Key$" et dans le "MessageRequester", tu utilise "key.s". Déclare tes variables une fois et tu auras moins de problème, sans oublier d'utilisé "EnableExplicit", qui t'obligera a bien déclarer tes variables.
Re: MAJ routine md5 ?? incompatible??
Publié : dim. 08/nov./2015 13:32
par GallyHC
falsam a écrit :GallyHC a écrit :Je vais faire mon rabat joie
Oui tu l'as fait

Au moins je le dis MOI
falsam a écrit :falsam a écrit :ce n’est pas possible de mettre un code à peu près "propre" et avec un minimum d’indentation ? La, cela fait un bloque illisible.
Ctrl+A et Ctrl+i pour un bon formatage du code et ça prend 2 secondes Gally. Bon ok il aurait pu le faire.
Comme cela tu auras donné la marche a suivre.
falsam a écrit :GallyHC a écrit :Cordialement
Heureusement que tu le dis

Généralement je suis poli.
falsam a écrit :A part ça bravo pour le coup d'oeil
GallyHC a écrit :Mais déjà une erreur du surement a ce que j'ai dit avant : Tu déclare "Key$" et dans le "MessageRequester", tu utilise "key.s". Déclare tes variables une fois et tu auras moins de problème, sans oublier d'utilisé "EnableExplicit", qui t'obligera a bien déclarer tes variables.
Un peu de pommade sa passe mieux lollll.
Cordialement,
GallyHC
Re: MAJ routine md5 ?? incompatible??
Publié : sam. 16/janv./2016 20:31
par caussatjerome
C'est bon j'ai trouver :
Code : Tout sélectionner
UseMD5Fingerprint()
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=Fingerprint(@key.s,Len(key.s),#PB_Cipher_MD5)
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=Fingerprint(@ipadt.s,Len(ipadt.s),#PB_Cipher_MD5)
opadt.s+hextoasc(hipad.s)
hopad.s=Fingerprint(@opadt.s,80,#PB_Cipher_MD5)
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
; IDE Options = PureBasic 5.41 LTS (Windows - x64)
; CursorPosition = 23
; FirstLine = 3
; Folding = -
; EnableXP
Ce code permet de généré des
empreinte MD5 à clef 
Cela peut servir à implémenter l'
authentification CRAM-MD5 sur un serveur
SMTP ou
AUTH DIGEST sur un serveur
HTTP,
Sont principale avantage par rapport à un simple système login/mot de passe est que le mot de passe
ne transite pas en claire sur les réseau.