Pour cela on prend les données par paquet de trois octets. On a donc 24bits. On va découper ces 24bits en 4 paquets égaux de 6 bits que l'on va ensuite translater dans une table de 7bits. On a donc 3 octets encodés dans 4 à l'arrivée (ce n'est pas très efficace pour une gestion tendue de la bande passante). Chaque paquet de 6 bits est donc un entier compris entre 0 et 63 (d'où base64). Les caractères sont translatés pour utiliser les caractères suivants:
- De 0 à 25 : A à Z
- De 26 à 51 : a à z
- De 52 à 61 : 0 à 9
- 62 : +
- 63 : /
Le résultat est un message encodé qui contient un nombre de caractères multiple de 4. Si il n'y a pas suffisamment de données, on complète avec le caractère égal (=). On utilise donc au total 65 caractères, il faut donc que le système supporte l'encodage en 7bits.
Pour le décodage, c'est très simple, on prend un paquet de 4 octets que l'on va encoder pour retrouver les 3 octets d'origine.
Voyons un exemple d'encodage et de décodage de données au format base64. Les codes qui suivent sont écrit en C et permettent l'encodage/décodage d'un fichier ou des données de l'entrée standard. Le résultat apparaît dans le fichier spécifié en paramètre ou sur la sortie standard.
Pour simplifier, on ne tient ici pas compte du format imposé par MIME sur la longueur maximale des lignes. Cela ne devrait cependant pas être le plus compliqué à gérer.