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 :mrgreen:
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 :wink:

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 :mrgreen:
Au moins je le dis MOI :mrgreen:
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 :wink:
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.