Base64
Algorithme utilisé par Up ! System
L'algorithme Base64 de l'Internet Engineering Task Force (IETF) permet d'encoder un flux binaire en un flux texte transformant un paquet de 3 octets en 4 caractères alphabétiques.
Son principe est le suivant :
- Groupement des octets par paquet de 3 en séquence.
Ce qui constitue un flux de 3 octets = 3*8 bits = 24 bits.
- Décomposition des 3 octets en 4 entiers.
24 bits = 4*6 bits = 4 entiers.
Les 3 octets initiaux ABCDEFGH, IJKLMNOP et QRSTUVWX deviennent donc les quatre octets 00ABCDEF, 00GHIJKL, 00MNOPQR et 00STUVWX.
- Translation des 4 entiers obtenus via une table de 64 index.
Puisque 2^6 bits = 64 valeurs.
La table est présentée ci-après. Sa particularité est qu'elle ne contient que des caractères alphabétiques existant dans toutes les pages de codes.
Si le flux n'est pas composé d'un multiple de trois octets, une 65ème valeur est ajoutée traduisant la fin de flux. Elle correspond au caractère égal =.
La taille de la ligne ne doit pas dépasser 76 caractères une fois encodée. Une ligne non encodée peut être découpée en plusieurs lignes encodées.
Le saut de ligne est représenté par les deux caractères successifs saut de ligne \n et retour chariot \r non encodés.
Table d'encodage
Table générale
Code décimal. | Code hexadécimal. | Caractère. |
000 | 0x00 | A |
001 | 0x01 | B |
002 | 0x02 | C |
003 | 0x03 | D |
004 | 0x04 | E |
005 | 0x05 | F |
006 | 0x06 | G |
007 | 0x07 | H |
008 | 0x08 | I |
009 | 0x09 | J |
010 | 0x0A | K |
011 | 0x0B | L |
012 | 0x0C | M |
013 | 0x0D | N |
014 | 0x0E | O |
015 | 0x0F | P |
016 | 0x10 | Q |
017 | 0x11 | R |
018 | 0x12 | S |
019 | 0x13 | T |
020 | 0x14 | U |
021 | 0x15 | V |
022 | 0x16 | W |
023 | 0x17 | X |
024 | 0x18 | Y |
025 | 0x19 | Z |
026 | 0x1A | a |
027 | 0x1B | b |
028 | 0x1C | c |
029 | 0x1D | d |
030 | 0x1E | e |
031 | 0x1F | f |
032 | 0x20 | g |
033 | 0x21 | h |
034 | 0x22 | i |
035 | 0x23 | j |
036 | 0x24 | k |
037 | 0x25 | l |
038 | 0x26 | m |
039 | 0x27 | n |
040 | 0x28 | o |
041 | 0x29 | p |
042 | 0x2A | q |
043 | 0x2B | r |
044 | 0x2C | s |
045 | 0x2D | t |
046 | 0x2E | u |
047 | 0x2F | v |
048 | 0x30 | w |
049 | 0x31 | x |
050 | 0x32 | y |
051 | 0x33 | z |
052 | 0x34 | 0 |
053 | 0x35 | 1 |
054 | 0x36 | 2 |
055 | 0x37 | 3 |
056 | 0x38 | 4 |
057 | 0x39 | 5 |
058 | 0x3A | 6 |
059 | 0x3B | 7 |
060 | 0x3C | 8 |
061 | 0x3D | 9 |
062 | 0x3E | Addition + |
063 | 0x3F | Division / |
064 | 0x40 | Egal = |
Table spécifique aux échanges Internet
Code décimal. | Code hexadécimal. | Caractère. |
000 | 0x00 | A |
001 | 0x01 | B |
002 | 0x02 | C |
003 | 0x03 | D |
004 | 0x04 | E |
005 | 0x05 | F |
006 | 0x06 | G |
007 | 0x07 | H |
008 | 0x08 | I |
009 | 0x09 | J |
010 | 0x0A | K |
011 | 0x0B | L |
012 | 0x0C | M |
013 | 0x0D | N |
014 | 0x0E | O |
015 | 0x0F | P |
016 | 0x10 | Q |
017 | 0x11 | R |
018 | 0x12 | S |
019 | 0x13 | T |
020 | 0x14 | U |
021 | 0x15 | V |
022 | 0x16 | W |
023 | 0x17 | X |
024 | 0x18 | Y |
025 | 0x19 | Z |
026 | 0x1A | a |
027 | 0x1B | b |
028 | 0x1C | c |
029 | 0x1D | d |
030 | 0x1E | e |
031 | 0x1F | f |
032 | 0x20 | g |
033 | 0x21 | h |
034 | 0x22 | i |
035 | 0x23 | j |
036 | 0x24 | k |
037 | 0x25 | l |
038 | 0x26 | m |
039 | 0x27 | n |
040 | 0x28 | o |
041 | 0x29 | p |
042 | 0x2A | q |
043 | 0x2B | r |
044 | 0x2C | s |
045 | 0x2D | t |
046 | 0x2E | u |
047 | 0x2F | v |
048 | 0x30 | w |
049 | 0x31 | x |
050 | 0x32 | y |
051 | 0x33 | z |
052 | 0x34 | 0 |
053 | 0x35 | 1 |
054 | 0x36 | 2 |
055 | 0x37 | 3 |
056 | 0x38 | 4 |
057 | 0x39 | 5 |
058 | 0x3A | 6 |
059 | 0x3B | 7 |
060 | 0x3C | 8 |
061 | 0x3D | 9 |
062 | 0x3E | Soustraction - |
063 | 0x3F | Souligné _ |
064 | 0x40 | Egal = |
Exemple d'un flux encodé l'algorithme Base64
Flux non encodé
/* ------------------------------------------------------------------- */
/* Fichier : clientftp.upl */
/* Objet : Exemple d'emploi d'Up ! Network. */
/* */
/* Module : Up ! Application System. */
/* Auteur-Date : DUVAL Jean-Pierre - Novembre 2003. */
/* ------------------------------------------------------------------- */
/* Observations */
/* */
/* */
/* ------------------------------------------------------------------- */
Source Composant "Exemple d'emploi d'Up ! Network" Version 4.0.0;
ImporterModule
UpsFts(, ImporterDefinitions);
Variable
/******/
MonServeur : Nul Ou ServeurFtp;
Principal
/*******/
Debut
MonServeur=ServeurFtp("ftp://local:21");
MonServeur.ChangerConnexion("anonymous", "contact@mon-domaine.com");
MonServeur.ChangerEtatTypeDonnees(TypeDonneesAscii);
CopierFichier("C:/tmp2/essai.txt", "ftp://local:21/tmp/essai.txt");
MonServeur.ChangerEtatTypeDonnees(TypeDonneesImage);
CopierFichier("ftp://local:21/tmp/essai.doc", "C:/tmp2/essai.doc");
MonServeur=Nul;
Fin Principal
Flux encodé
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBGaWNoaWVyICAgIDog
Y2xpZW50ZnRwLnVwbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICovCi8qIE9iamV0ICAgICAgOiBFeGVtcGxlIGQnZW1wbG9p
IGQnVXAgISBOZXR3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLyog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqLwovKiBNb2R1bGUgICAgICA6IFVw
ICEgQXBwbGljYXRpb24gU3lzdGVtLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KLyogQXV0ZXVyLURhdGUgOiBEVVZBTCBKZWFuLVBpZXJyZSAt
IE5vdmVtYnJlIDIwMDMuICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAg
ICAgICBPYnNlcnZhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKi8KLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLyogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqLyAKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwoKU291cmNlIENvbXBvc2FudCAiRXhlbXBsZSBkJ2VtcGxvaSBkJ1Vw
ICEgTmV0d29yayIgVmVyc2lvbiAxLjIuMDsKCkltcG9ydGVyTW9kdWxlIAog
ICBVcHNGdHAoPFVwc0Z0cD4sIEltcG9ydGVyRGVmaW5pdGlvbnMpOwoKVmFy
aWFibGUKLyoqKioqKi8KICAgTW9uU2VydmV1ciA6IE51bCBPdSBTZXJ2ZXVy
RnRwOwoKUHJpbmNpcGFsCi8qKioqKioqLwpEZWJ1dApNb25TZXJ2ZXVyPVNl
cnZldXJGdHAoIlVwc0Z0cDovL2xvY2FsOjIxIik7CgpNb25TZXJ2ZXVyLkNo
YW5nZXJDb25uZXhpb24oImFub255bW91cyIsICJjb250YWN0QHVwLWNvbXAu
Y29tIik7Ck1vblNlcnZldXIuQ2hhbmdlckV0YXRUeXBlRG9ubmVlcyhUeXBl
RG9ubmVlc0FzY2lpKTsKQ29waWVyRmljaGllcigiQzovdG1wMi9lc3NhaS50
eHQiLCAiVXBzRnRwOi8vbG9jYWw6MjEvdG1wL2Vzc2FpLnR4dCIpOwpNb25T
ZXJ2ZXVyLkNoYW5nZXJFdGF0VHlwZURvbm5lZXMoVHlwZURvbm5lZXNJbWFn
ZSk7CkNvcGllckZpY2hpZXIoIlVwc0Z0cDovL2xvY2FsOjIxL3RtcC9lc3Nh
aS5kb2MiLCAiQzovdG1wMi9lc3NhaS5kb2MiKTsKTW9uU2VydmV1cj1OdWw7
CkZpbiBQcmluY2lwYWwKCg==