FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Coder un texte en base64 Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Coder un texte en base64 Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Coder un texte en base64 Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Coder un texte en base64 Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Coder un texte en base64 Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Coder un texte en base64 Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Coder un texte en base64 Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Coder un texte en base64 Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Coder un texte en base64 Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Coder un texte en base64 Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Coder un texte en base64 Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Coder un texte en base64 Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Coder un texte en base64 Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Coder un texte en base64 Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Coder un texte en base64 Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -28%
Précommande : Smartphone Google Pixel 8a 5G ...
Voir le deal
389 €

 

 Coder un texte en base64

Aller en bas 
2 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Coder un texte en base64 Empty
MessageSujet: Coder un texte en base64   Coder un texte en base64 EmptySam 23 Oct 2021 - 23:20

Bonjour à tous !

Dans un autre fil de discussion, Jean_Debord a proposé l’idée d’effectuer un codage en base64.

L’idée m’a plu et j’ai écrit ces quelques lignes de code pour effectuer des tests.

Code:
' Encodage base64 et base64URL
' Marc - Octobre 2021
dim base64$(63,1)

label convertir

creerTableBase64()

interfaceUtilisateur()

end


sub interfaceUtilisateur()
    caption 0,"Conversion de texte en base64"

    memo 1
    top 1,55
    left 1,70

    button 2
    top 2,300
    width 2,150
    left 2,217
    top 2,205
    caption 2,"Convertir en base64"
    on_click 2,convertir

    button 3
    top 3,260
    left 3,217
    width 3,150
    caption 3,"Convertir en base64URL"
    on_click 3,convertir

    memo 4
    left 4,330
    top 4,55
    
    alpha 5
    left 5,70
    top 5,40
    caption 5,"Tapez votre texte à convertir :"
    
    alpha 6
    left 6,333
    top 6,40
    caption 6,"Texte encodé en base64 :"
end_sub


convertir:
    if number_click = 2
        encodageBase64(0)
        caption 6,"Texte encodé en base64"
    else
        encodageBase64(1)
        caption 6,"Texte encodé en base64URL"
    end_if    
return


sub encodageBase64(type%)
    dim_local a$, b%, octet$, d$, e%, n%, m%, p%, groupe24Ascii$, groupe24binaire$, index%, texteBase64$, ajout$
    
    clear 4
    a$ = text$(1)
    
    ' lecture de la chaine a$ par groupes de 24 bits (3 octets)
    for index% = 1 to len(a$) step 3
        groupe24Ascii$ = mid$(a$,index%,3)

        ' conversion en binaire, de groupe24Ascii$ dans groupe24binaire$
        for n% = 1 to len(groupe24Ascii$)
            b% = asc(mid$(groupe24Ascii$,n%,1))

            while b% > 0
                if frac(b% / 2) = 0
                    octet$ = "0" + octet$
                else
                    octet$ = "1" + octet$
                end_if
                b% = INT(b% / 2)
           end_while
          
           while len(octet$) < 8
               octet$ = "0" + octet$
           end_while            

           groupe24Binaire$ = groupe24Binaire$ + octet$
           octet$ = ""
        next n%

        ' compléter groupe24Binaire$ jusqu'à concurrence de 24 bits
        if len(groupe24Binaire$) < 24
            if len(groupe24Binaire$) = 16
                groupe24Binaire$ = groupe24Binaire$ + "00"
                ajout$ = "="
            else
                groupe24Binaire$ = groupe24Binaire$ + "0000"
                ajout$ = "=="
            end_if
        end_if

        ' lecture par groupe de 6 bits + codage
        for p% = 1 to len(groupe24binaire$) step 6  
            e% = 0
            d$ = mid$(groupe24Binaire$,p%,6)
            WHILE d$ <> ""
                e% = (e% * 2) + INSTR("01",LEFT$(d$,1))-1
                d$ = RIGHT$(d$,LEN(d$)-1)
            END_WHILE
            texteBase64$ = texteBase64$ + base64$(e%,type%)
        next p%
        groupe24Binaire$ = ""
    next index%

    if type% = 0
        text 4,texteBase64$ + ajout$
    else
        text 4,texteBase64$
    end_if
    
end_sub



sub creerTableBase64()
    dim_local n%
    
    ' Deux bases 64 sont créées :
    ' base64 => base64$(_,0)
    ' base64URL => base64$(_,1)

    for n% = 0 to 25 :' lettres majuscules "A" à "Z"
        base64$(n%,0) = chr$(65 + n%)
        base64$(n%,1) = chr$(65 + n%)
    next n%

    for n% = 26 to 51 :' lettres minuscules "a" à "z"
        base64$(n%,0) = chr$(97 + n% - 26)
        base64$(n%,1) = chr$(97 + n% - 26)
    next n%

    for n% = 52 to 61 :' chiffres de "0" à "9"
        base64$(n%,0) = chr$(48 + n% - 52)
        base64$(n%,1) = chr$(48 + n% - 52)
    next n%

    base64$(62,0) = chr$(43) :' "+"
    base64$(62,1) = chr$(45) :' "-"
    base64$(63,0) = chr$(47) :' "/"
    base64$(63,1) = chr$(95) :' "_"
end_sub


Coder un texte en base64 Base6412


Le programme est expérimental. Il ne fait que le codage. Les quelques essais que j’ai effectués semblent concluants.

A suivre…

Edit du 24/10/2021 10:05  Mise à jour du code : suppression des signes "=" en fin de chaîne de caractères uniquement en base64URL.


Dernière édition par Marc le Dim 24 Oct 2021 - 10:09, édité 2 fois
Revenir en haut Aller en bas
jean_debord

jean_debord


Nombre de messages : 1250
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Coder un texte en base64 Empty
MessageSujet: Re: Coder un texte en base64   Coder un texte en base64 EmptyDim 24 Oct 2021 - 8:07

Merci pour cet exemple Marc Smile

J'ajouterai ces fonctionnalités dans FBCroco.

Il y a 2 procédures de D. J. Peters en FreeBASIC (voir dans l'installation FBCroco : fb\inc\FBImage.bi)
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
jean_debord

jean_debord


Nombre de messages : 1250
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Coder un texte en base64 Empty
MessageSujet: Re: Coder un texte en base64   Coder un texte en base64 EmptyLun 25 Oct 2021 - 10:33

Je n'obtiens pas tout-à-fait le même résultat avec les procédures de D. J. Peters.

Voici le programme en FreeBASIC :

Code:

namespace Base64
  static as string*64 B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" _
                          & "abcdefghijklmnopqrstuvwxyz" _
                          & "0123456789+/"

  Function EncodeMemory(buffer as any ptr,size as long) As String
    #define E0 (S[j] shr 2)
    #define E1 (((S[j] and &H03) shl 4) + (S[j+1] shr 4))
    #define E2 (((S[j+1] and &H0F) shl 2) + (S[j+2] shr 6))
    #define E3 (S[j+2] and &H3F)
    dim as long nChars = size
    if nChars=0 then return ""
    dim as ubyte ptr S=buffer
    dim as long j,k,m = nChars mod 3
    dim as string r=string(((nChars+2)\3)*4,"=")
    nChars-= (m+1)
    For j = 0 To nChars Step 3
      r[k]=B64[e0] : r[k+1]=B64[e1] : r[k+2]=B64[e2] : r[k+3]=B64[e3]:k+=4
    Next
    if m then
      r[k]=B64[e0] : r[k+1]=B64[e1] : r[k+3]=61
      If m = 2 Then r[k+2]=B64[e2] Else  r[k+2]=61
    end if
    return r
    #undef E0
    #undef E1
    #undef E2
    #undef E3
  End Function

  Function DecodeMemory(s As String,byref nBytes as integer) As any ptr
    #define P0(p) instr(B64,chr(s[n+p]))-1
    dim as long nChars=Len(s)
    if nChars<1 then return 0
    nBytes=nChars : nChars-=1
    dim as ubyte ptr O,buffer=callocate(nBytes)
    O=buffer
    for n As long = 0 To nChars Step 4
      var b = P0(1), c = P0(2), d = P0(3)
      if b>-1 then
        var a = P0(0) : *O = (a shl 2 + b shr 4) : O+=1
      end if
      if c>-1 then *O = (b shl 4 + c shr 2) : O+=1
      if d>-1 then *O = (c shl 6 + d) : O+=1
    next
    return buffer
    #undef P0
  end function
end namespace  

' **********************************************************

dim as string a, a1
dim as zstring ptr b

a = "Bonjour les amis Panoramiciens"

? "Chaine initiale : "; a

a1 = Base64.EncodeMemory(strptr(a), len(a))

? "Chaine encodee  : "; a1

b = Base64.DecodeMemory(a1, len(a1))

? "Chaine decodee  : "; *b

sleep

Et voici le résultat :

Code:

Chaine initiale : Bonjour les amis Panoramiciens
Chaine encodee  : Qm9uam91ciBsZXMgYW1pcyBQYW5vcmFtaWNpZW5z
Chaine decodee  : Bonjour les amis Panoramiciens
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Coder un texte en base64 Empty
MessageSujet: Re: Coder un texte en base64   Coder un texte en base64 EmptyLun 25 Oct 2021 - 10:49

Bonjour Jean,

Il manque le point d'exclamation précédé un espace à la fin de la chaîne "Bonjour les amis Panoramiciens !"

Revenir en haut Aller en bas
jean_debord

jean_debord


Nombre de messages : 1250
Age : 69
Localisation : Limoges
Date d'inscription : 21/09/2008

Coder un texte en base64 Empty
MessageSujet: Re: Coder un texte en base64   Coder un texte en base64 EmptyLun 25 Oct 2021 - 11:06

Exact ! J'avais oublié ces 2 caractères Embarassed

Nous sommes donc bien d'accord :

Code:

Chaine initiale : Bonjour les amis Panoramiciens !
Chaine encodee  : Qm9uam91ciBsZXMgYW1pcyBQYW5vcmFtaWNpZW5zICE=
Chaine decodee  : Bonjour les amis Panoramiciens !

Je vais donc mettre ces deux fonctions dans FBCroco, avec leurs équivalents pour les images.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
Contenu sponsorisé





Coder un texte en base64 Empty
MessageSujet: Re: Coder un texte en base64   Coder un texte en base64 Empty

Revenir en haut Aller en bas
 
Coder un texte en base64
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Décodage base64
» Codeur / décodeur Base64 et Base64URL
» Coder sous linux
» Rotation de texte
» Texte incliné

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: