Base32
Algorithme utilisé par Up ! System
L'algorithme Base32 de l'Internet Engineering Task Force (IETF) permet d'encoder un flux binaire en un flux texte transformant un paquet de 5 octets en 8 caractères alphabétiques.
Son principe est le suivant :
- Groupement des octets par paquet de 5 en séquence.
Ce qui constitue un flux de 5 octets = 5*8 bits = 40 bits.
- Décomposition des 5 octets en 8 entiers.
40 bits = 8*5 bits = 8 entiers.
Les 5 octets initiaux ABCDEFGH, IJKLMNOP, QRSTUVWX, ZTabcdef et ghijklmn deviennent donc les huits octets
000ABCDE, 000FGHIJ, 000KLMNO, 000PQRST, 000UVWXY, 000Zabcd, 000efghi et 000jklmn.
- Translation des 8 entiers obtenus via une table de 32 index.
Puisque 2^5 bits = 32 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 5 octets, une 32è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
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 | 2 |
027 | 0x1B | 3 |
028 | 0x1C | 4 |
029 | 0x1D | 5 |
030 | 0x1E | 6 |
031 | 0x1F | 7 |
032 | 0x20 | Egal = |
Exemple d'un flux encodé l'algorithme Base32
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é
F4VCALJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJN
FUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNEAVC6CRPFIQEM2LDNBUWK4RAEAQCAORA
MNWGSZLOORTHI4BOOVYGYIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBA
EAQCAIBAEAQCAIBAFIXQULZKEBHWE2TFOQQCAIBAEAQDUICFPBSW24DMMUQGIJ3FNVYGY33J
EBSCOVLQEAQSATTFOR3W64TLFYQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBKF4FC6KRA
EAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBA
EAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAKRPBIXSUICNN5SHK3DFEAQCAIBAEA5CAVLQ
EAQSAQLQOBWGSY3BORUW63RAKN4XG5DFNUXCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBA
EAQCAIBAEAVC6CRPFIQEC5LUMV2XELKEMF2GKIB2EBCFKVSBJQQEUZLBNYWVA2LFOJZGKIBN
EBHG65TFNVRHEZJAGIYDAMZOEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAFIXQULZKEAWS2LJN
FUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJN
FUWS2LJNFUWS2LJNFUWS2LJNFUWS2IBKF4FC6KRAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBA
EAQCAIBAJ5RHGZLSOZQXI2LPNZZSAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBA
EAQCAKRPBIXSUIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBA
EAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCULZABIXSUIBAEAQCAIBA
EAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBAEAQCAIBA
EAQCAIBAEAQCAIBAEAQCAIBAEAQCULZABIXSUIBNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJN
FUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJNFUWS2LJN
FUQCULYKBJJW65LSMNSSAQ3PNVYG643BNZ2CAISFPBSW24DMMUQGIJ3FNVYGY33JEBSCOVLQ
EAQSATTFOR3W64TLEIQFMZLSONUW63RAGEXDELRQHMFAUSLNOBXXE5DFOJGW6ZDVNRSSACRA
EAQFK4DTIZ2HAKB4KVYHGRTUOA7CYICJNVYG64TUMVZEIZLGNFXGS5DJN5XHGKJ3BIFFMYLS
NFQWE3DFBIXSUKRKFIVCULYKEAQCATLPNZJWK4TWMV2XEIB2EBHHK3BAJ52SAU3FOJ3GK5LS
IZ2HAOYKBJIHE2LOMNUXAYLMBIXSUKRKFIVCUKRPBJCGKYTVOQFE233OKNSXE5TFOVZD2U3F
OJ3GK5LSIZ2HAKBCKVYHGRTUOA5C6L3MN5RWC3B2GIYSEKJ3BIFE233OKNSXE5TFOVZC4Q3I
MFXGOZLSINXW43TFPBUW63RIEJQW433OPFWW65LTEIWCAITDN5XHIYLDORAHK4BNMNXW24BO
MNXW2IRJHMFE233OKNSXE5TFOVZC4Q3IMFXGOZLSIV2GC5CUPFYGKRDPNZXGKZLTFBKHS4DF
IRXW43TFMVZUC43DNFUSSOYKINXXA2LFOJDGSY3INFSXEKBCIM5C65DNOAZC6ZLTONQWSLTU
PB2CELBAEJKXA42GORYDULZPNRXWGYLMHIZDCL3UNVYC6ZLTONQWSLTUPB2CEKJ3BJGW63ST
MVZHMZLVOIXEG2DBNZTWK4SFORQXIVDZOBSUI33ONZSWK4ZIKR4XAZKEN5XG4ZLFONEW2YLH
MUUTWCSDN5YGSZLSIZUWG2DJMVZCQISVOBZUM5DQHIXS63DPMNQWYORSGEXXI3LQF5SXG43B
NEXGI33DEIWCAISDHIXXI3LQGIXWK43TMFUS4ZDPMMRCSOYKJVXW4U3FOJ3GK5LSHVHHK3B3
BJDGS3RAKBZGS3TDNFYGC3AKBI======