Voici un petit code qui pourait servire.
Peut-être y a-t-il eu déjà un poste à ce sujet, mais je ne l'ai pas trouvé.
Donc ce code... Vous entrez une chaîne de caractère, il la crypte en Base64, vous montre le résultat, la décode, vous montre le résultat, et si les deux chaînes ne sont pas les mêmes, il le dit

Code : Tout sélectionner
Procedure Decode(b64in$, b64len.l, *b64out, b64max.l)
*b64in.l = @b64in$ ; <- On mait ça pour utiliser une chaîne de caractère en paramaître
; Tables de conversion
For b64x = 0 To 255
b64asc$ = b64asc$ + Right("0000000" + Bin(b64x), 8) + "|" ; Code ASC Binairs
Next b64x
b64tab$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ; Code base64
RtlFillMemory_(*b64out, b64max, 0)
; décoder
b64tln = b64len / 4
For b64xln.l = 0 To b64tln - 1
b64bcd$ = PeekS(*b64in + b64xln * 4, 4)
b64bin$ = ""
b64pad = 0
For b64xb = 1 To 4
b64tcd$ = Mid(b64bcd$, b64xb, 1)
b64num = FindString(b64tab$, b64tcd$, 0) ; base64 à 6 Bit-Code
If b64num > 0
If b64num = 65
b64pad + 1
EndIf
b64bin$ + Right("000000" + Bin(b64num - 1), 6) ; Code 24 Bit
Else
b64err = 1
b64xln = b64tln + 1
EndIf
Next b64xb
For b64xu = 0 To 2 - b64pad
b64bit$ = Mid(b64bin$, 1 + b64xu * 8, 8) + "|"
b64num = FindString(b64asc$, b64bit$, 0) / 9 ; ASC Code 8 Bit Binair
PokeS(*b64out + b64buf, Chr(b64Num))
b64buf + 1
If b64buf > b64max
b64err = 1
b64xln = b64tln + 1
EndIf
Next b64xu
Next b64xln
If b64err = 1
RtlFillMemory_(*b64out, b64max, 0)
b64buf = -1
EndIf
ProcedureReturn b64buf
EndProcedure
mot$ = InputRequester("Essais Base64 Encoder", "Entrez la phrase à crypter:", LSet("Essais", 1000, "@")) ; on force à avoir une chaîne longue comme valeure par défaut (faut bien s'amuser!)
If mot$
nb = Len(mot$) + Len(mot$) * 1.31 ; on calcule ce qu'il faudra alouer comme mémoire (31% de plus que le nombre d'octets que prand la chaîne originale).
If nb < 64 ; Comme il faut alouer au minimum 64 octets de mémoire pour Base64Encoder(),
; on vérifi que le nombre calculé est bien supérieur ou égal à 64
; S'il est inférieur, on le défini à 64
nb = 64
EndIf
*buffer = AllocateMemory(nb)
Base64Encoder(mot$, Len(mot$), *buffer, nb)
var$ = PeekS(*buffer)
MessageRequester("Essais", var$, #mb_ok | #mb_iconasterisk)
*buffer2 = AllocateMemory(Len(var$)) ; à paremment, pas de restriction au niveau de la mémoire à alouer pour décoder.
Decode(var$, Len(var$), *buffer2, Len(var$)) ; ........ on décode!
decripte$ = PeekS(*buffer2) ; on récupère le contenu du buffer contenant la chaîne redécryptée
MessageRequester("Essais", decripte$, #mb_ok | #mb_iconasterisk)
If decripte$ <> mot$ ; Histoire de croire en sois, on vérifie que la chaîne décryptée et la chaîne
; originale soit bien les mêmes
MessageRequester("Oups", "Les deux chaînes sont différentes!", #mb_ok | #mb_iconexclamation)
EndIf
FreeMemory(*buffer)
FreeMemory(*buffer2)
EndIf
End

Amusez-vous bien!
