Si vous demandez un MD5 d'une chaine de caractère ce MD5 va changé en fonction de si votre programme est compilé en unicode ou non !
Dans mon cas je communique via Http avec un serveur php ... et pour vérifier la requête je fabrique une clef avec la commande md5()
et sur mon serveur web je créer une clef Key de la même façon que je la fabrique dans mon programme en purebasic.monsite.com/index.php?Act=Montrucafaire&key=032ab239e2e9b66badf553cde9de5981
Si la clef est la même sur les deux ! alors mon serveur web execute l'action !
Ca marchait tres bien au depart, lorsque j'ai basculé mon application en unicode, ma requête http était refusé car la clef fabriqué part mon application et celle fabriqué part le serveur web était différente... et cela a cause de la compilation en unicode.
Je me suis donc fait une petite fonction permettant d'avoir le même MD5 dans mon application que sur le serveur web que mon application soit compilé ou non en unicode.
Essayez ce petit programme en compilant d'abord sans l'unicode puis en unicode
Code : Tout sélectionner
Procedure.s MD5Ascii(Key.s)
Protected *txtmem,txtSize.l,Result.s
txtSize=StringByteLength(Key, #PB_Ascii)
*txtmem=AllocateMemory(txtSize+2);Voir le message de fred plus bas / +1 normalement et +2 si compilé en unicode
PokeS(*txtmem,Key,-1,#PB_Ascii)
Result.s=MD5Fingerprint(*txtmem, txtSize)
FreeMemory(*txtmem)
ProcedureReturn Result
EndProcedure
;Ma procédure pour faire une requête Http et récupérer le resultat
Procedure.s ReceiveHTTPData(Url$,Filename$)
Protected Var.s=""
If ReceiveHTTPFile(Url$, Filename$)
If ReadFile(0, Filename$) ; if the file could be read, we continue...
While Eof(0) = 0 ; loop as long the 'end of file' isn't reached
Var=Var+ReadString(0)+Chr(10)
Wend
CloseFile(0)
DeleteFile(Filename$)
Else
Debug "fileError"
EndIf
Else
Debug "Error "
EndIf
ProcedureReturn Var
EndProcedure
key.s="Test"
Debug MD5Fingerprint(@key,StringByteLength(Key))
Debug MD5Ascii(key)