PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Encoder et décoder en base64
Encoder et décoder en base64
Iniciado por gmail_vinii, mar., 22 2005 9:57 AM - 5 respostas
Publicado em março, 22 2005 - 9:57 AM
Bonjour,

Est-ce que quelqu'un comment on fait pour encoder et décoder queleque chose
en base64 ?


Merci
Publicado em março, 22 2005 - 10:20 AM
cherche dans la soucoupe "hexa" et utilise l'assistant : Conversion entre
nombres décimaux et hexadécimaux
ce code peut être facilement adapté pour d'autres bases


bon dev JCP


"Vincent" <gmail_vinii@laposte.net> a écrit dans le message de news:
d1oj34$3iu$1@biggoron.nerim.net...

Bonjour,

Est-ce que quelqu'un comment on fait pour encoder et décoder queleque chose
en base64 ?


Merci
Publicado em março, 22 2005 - 10:56 AM
Bonjour,

Pour encoder en base64, tu peux utiliser la fonction crypte, pour décoder la fonction decrypte, comme suit :

Chaine_Encodee_Base64=Crypte(Chaine_Source,"",crypteAucun,Vrai)

(C'est beaucoup plus rapide que les algorythme que tu pourras trouver, qui encode caractère par caractère).

Utilise la fonction decrypte avec les même arguments pour décoder.
Publicado em março, 22 2005 - 9:21 PM
Attention, la fonction crypte / décrypte telle que vous la donnez ne crée pas ou ne décode pas correctement la base 64...
Il ne respecte pas et ne crée pas, entre autres, les "=" en fin de chaîne, ce qui rends ces fonctions inutiles...

Par exemple essayez de coder:
testtest
en base 64 vous aurez:
dGVzdHRlc3Q=
or, via la fonction crypte, vous aurez:
dGVzdHRlc3Q
qui ne sera pas vraiment compréhensible par d'autres décodeurs...

Plus grave, si vous essayez de décoder la chaîne:
dGVzdHRlc3Q=
Vous obtiendrez via décrypte:
testtest?
alors que la bonne "traduction" est bien:
testtest

Bref, il vaut mieux utiliser un algo externe correct...
Publicado em março, 22 2005 - 9:22 PM
Attention, la fonction crypte / décrypte telle que vous la donnez ne crée pas ou ne décode pas correctement la base 64...
Il ne respecte pas et ne crée pas, entre autres, les "=" en fin de chaîne, ce qui rends ces fonctions inutiles...

Par exemple essayez de coder:
testtest
en base 64 vous aurez:
dGVzdHRlc3Q=
or, via la fonction crypte, vous aurez:
dGVzdHRlc3Q
qui ne sera pas vraiment compréhensible par d'autres décodeurs...

Plus grave, si vous essayez de décoder la chaîne:
dGVzdHRlc3Q=
Vous obtiendrez via décrypte:
testtest?
alors que la bonne "traduction" est bien:
testtest

Bref, il vaut mieux utiliser un algo externe correct...
Publicado em julho, 06 2005 - 3:58 PM
Tout le monde parle d'encodage en base64, mais personne ne donne d'algorithme...
Je me permet donc d'en poster un qui fonctionne correctement ci-dessous...
En espérant que ça puisse dépanner certains...

[ N'hésitez pas à réagir si d'aventure "bug's" il devait y avoir...]

_________________________________________________________________
// NAME
// base64encode
//
// DESCRIPTION
// Encode data using base-64
// Capable of operating in RFC 2045 compliant mode, or "URL safe" mode
// "URL safe" mode is a nonstandard mode designed for use in URL querystrings.
//
// PARAMETERS
// sBinaryString - Any string data
//
// bNoWrap (optional) - If set to anything other than false then line wrapping will not occur
// Default is false in compliance with RFC 2045.
//
// bUrlSafe (optional) - If set to anything other than false then "URL safe" mode is used.
// This is a nonstandard mode that can be used in URLs without additional
// URL encoding. Default is false for compliance with RFC 2045.
//
// RETURNS
// Base-64 encoded string.
FUNCTION base64encode( sBinaryString is string, bNoWrap is boolean = False, bUrlSafe is boolean = False)
sBase64Lookup is a string
sTrail is a string
sOutput is a string
nIndex is an int
nTrailingBytes is an int
nLengthWhole is an int
nByte1,nByte2,nByte3 are an int
sChar1,sChar2,sChar3,sChar4 are strings

// Define the lookup table according to whether we are using
// "URL safe" mode or RFC 2045-compliant mode:

IF( NOT bUrlSafe ) THEN
sBase64Lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
sTrail = "="
ELSE
sBase64Lookup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
sTrail = "."
END

// Initialise everything else...

sOutput = ""
nIndex = 1
nTrailingBytes = modulo(Length(sBinaryString), 3)
nLengthWhole = Length(sBinaryString)- (nTrailingBytes)

// Store all the complete quanta...

WHILE nIndex < nLengthWhole

nByte1 = Asc(Middle(sBinaryString, nIndex, 1))
nByte2 = Asc(Middle(sBinaryString, nIndex + 1, 1))
nByte3 = Asc(Middle(sBinaryString, nIndex + 2, 1))

sChar1 = sBase64Lookup[[ IntegerPart(( BinaryAND( nByte1, 252 ) / 4 )) + 1 ]]
sChar2 = sBase64Lookup[[ IntegerPart( BinaryAND( (nByte1*256)+nByte2, 1008 ) / 16 ) + 1 ]]
sChar3 = sBase64Lookup[[ IntegerPart( BinaryAND( (nByte2*256)+nByte3, 4032 ) / 64 ) + 1 ]]
sChar4 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte3, 63 ) ) + 1]]


sOutput = sOutput + sChar1 + sChar2 + sChar3 + sChar4
nIndex = nIndex + 3

// Wrap at 76 characters
IF( NOT bNoWrap ) THEN
IF( modulo((nIndex-1) , 57) = 0 ) THEN sOutput = sOutput + CR
END

END

// Store any partial quanta at the end....

IF( nTrailingBytes = 1 ) THEN

// Partial quanta containing a single byte...

nByte1 = Asc( sBinaryString[[ nIndex ]] )
sChar1 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte1, 252 ) / 4 ) + 1 ]]
sChar2 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte1*256, 1008 ) / 16 ) + 1 ]]
sChar3 = sTrail
sChar4 = sTrail

sOutput = sOutput + sChar1 + sChar2 + sChar3 + sChar4

ELSE IF ( nTrailingBytes = 2 ) THEN

// Partial quanta containing two bytes...

nByte1 = Asc( sBinaryString[[ nIndex ]] )
nByte2 = Asc( sBinaryString[[ nIndex + 1 ]] )
sChar1 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte1, 252 ) / 4 ) + 1 ]]
sChar2 = sBase64Lookup[[ IntegerPart( BinaryAND( (nByte1*256)+nByte2, 1008 ) / 16 ) + 1 ]]
sChar3 = sBase64Lookup[[ IntegerPart( BinaryAND( nByte2*256, 4032 ) / 64 ) + 1 ]]
sChar4 = sTrail

sOutput = sOutput + sChar1 + sChar2 + sChar3 + sChar4

END

// All done!

RESULT sOutput
_________________________________________________________________