OVH Cloud OVH Cloud

Base64 Windev

2 réponses
Avatar
Daniel
L'encodage en Base64/et d=E9codage est incorrecte au moins sur WD7.5.


Pour les autres versions faire le test suivant pour savoir.
la fonction sous windev est crypte(chaine,"",crypteaucun)

POur ceux qui sont sous WD8,9,10 peuvent ils faire le test pour savoir
si PCSoft a corrig=E9 ou pas.


Le tableau ci-dessous indique la chaine ("dummy:secret")
et le r=E9sultat Base64 attendu et celui renvoy=E9 par la fonction Crypte

dummy:secret
Base64 : ZHVtbXk6c2VjcmV0
Crypte : ZHVtbXk6c2VjcmV0
dummy:secret1
Base64 : ZHVtbXk6c2VjcmV0MQ=3D=3D
Crypte : ZHVtbXk6c2VjcmV0MQ
dummy:secret11
Base 64 : ZHVtbXk6c2VjcmV0MTE=3D
Crypte : ZHVtbXk6c2VjcmV0MTE
dummy:secret111
Base64 : ZHVtbXk6c2VjcmV0MTEx
Crypte : ZHVtbXk6c2VjcmV0MTEx=20



Ci-joint le code de la fonction Base64Decode qui permet d'=EAtre conforme

FONCTION Base64Decode(pData est cha=EEne)
BASE64 est cha=EEne =3D "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx=
yz0123456789+/"
TABLEAU_BASE64BIN est un tableau de 64 cha=EEne fixe sur 6

Xlc_car est un caract=E8re
Xls_Bin est cha=EEne
Xle_AscCode est entier sans signe sur 1 octet
Xls_result est cha=EEne
Xle_taille_pdata est entier
Xle_taille_bin est entier
i est entier

// cr=E9ation du tableau Binaire
POUR i=3D1 A 64 TABLEAU_BASE64BIN[i] =3D DecToBin(i-1)
FIN=20=20=20

// extrait le caract=E8re et cherche sa correspondance valeur binaire/hexa
Xle_taille_pdata =3D Taille(pData)
i =3D 1
BOUCLE
Xlc_car =3D Milieu(pData, i, 1)
SI Position(BASE64, Xlc_car) <> 0 ALORS
Xls_Bin +=3D TABLEAU_BASE64BIN[Position(BASE64, Xlc_car)]
FIN
i++
SI i > Xle_taille_pdata ALORS SORTIR
FIN


// prend la chaine binaire et recode le caract=E8re en d=E9cimal
Xle_taille_bin =3D Taille(Xls_Bin)
i =3D 1
BOUCLE SI Taille(Milieu(Xls_Bin, i, 8)) < 8 ALORS
SORTIR
SINON
Xle_AscCode =3D BinToDec(Milieu(Xls_Bin, i, 8))
Xls_result +=3D Caract(Xle_AscCode)
FIN
i +=3D 8
SI i > Xle_taille_bin ALORS SORTIR
FIN


RENVOYER Xls_result


FONCTION BinToDec(CodeBin est cha=EEne)
RENVOYER Val(CodeBin, 2)

FONCTION DecToBin(xlpar_binaire est entier)
XL_reste est un bool=E9en
Xl_resultat est cha=EEne

TANTQUE xlpar_binaire <> 0
XL_reste =3D modulo(xlpar_binaire,2)
Xl_resultat =3D XL_reste + Xl_resultat
// renvoie uniquement partie enti=E8re
xlpar_binaire =3D xlpar_binaire / 2
FIN
Xl_resultat =3D R=E9p=E8te("0",6-Taille(Xl_resultat))+Xl_resultat

RENVOYER Xl_resultat



dvauterin@sqlmanagerx.com
--=20
suivre ce lien pour r=E9pondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)

2 réponses

Avatar
Romain PETIT
Daniel a formulé la demande :
L'encodage en Base64/et décodage est incorrecte au moins sur WD7.5.



Oui oui, le problème est connu :
http://groups.google.fr/group/fr.comp.developpement.agl.windev/browse_frm/thread/ca8b6674703573cd/fe0e6cc60af7a165?&hl=fr#fe0e6cc60af7a165

Merci pour la soluce !
(il y en a une aussi "en face", voir le fil donné)

A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Daniel
Romain PETIT writes:

Daniel a formulé la demande :
> L'encodage en Base64/et décodage est incorrecte au moins sur WD7.5.

Oui oui, le problème est connu :
http://groups.google.fr/group/fr.comp.developpement.agl.windev/browse_frm /thread/ca8b6674703573cd/fe0e6cc60af7a165?&hl=fr#fe0e6cc60af7a165

Merci pour la soluce !
(il y en a une aussi "en face", voir le fil donné)




Je n'ai pas mis la fonction encode car effectivement elle existe sur
le forum en face.


A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)





--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)