MAJ routine md5 ?? incompatible??

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

MAJ routine md5 ?? incompatible??

Message 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
Dernière modification par caussatjerome le dim. 22/nov./2015 6:09, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: MAJ routine md5 ?? incompatible??

Message par falsam »

Qu'est ce qui ne va pas ?
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: MAJ routine md5 ?? incompatible??

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: MAJ routine md5 ?? incompatible??

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: MAJ routine md5 ?? incompatible??

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: MAJ routine md5 ?? incompatible??

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
caussatjerome
Messages : 50
Inscription : lun. 24/sept./2012 20:57
Localisation : Somme

Re: MAJ routine md5 ?? incompatible??

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