Aller au contenu principal

Base64 vs Hex

Toutes deux sont des encodages de texte des mêmes octets, définis par la RFC 4648 — la différence est arithmétique et tient à l’habitat. L’hexadécimal double la taille mais reste aligné sur les demi-octets et sans padding : il règne sur les sommes de contrôle, les adresses MAC et le débogage. Base64 grossit les données d’un tiers : il règne sur le transport en masse — MIME, JWT, data: URIs et cookies.

100 % local

Base64 vs Hex en clair

Les deux encodages semblent interchangeables : tous deux transforment des octets arbitraires en texte imprimable, tous deux se décodent sans perte, et tous deux sont définis côte à côte dans la RFC 4648. Ce ne sont pas tant des concurrents que deux écritures aux arithmétiques différentes — l’hexadécimal donne deux caractères à chaque octet ; base64 range trois octets dans quatre caractères. Tout le reste de cette page, du padding à l’habitat, découle de cette arithmétique.

Les chiffres, précisément : l’hexadécimal est en base 16 — seize caractères de 4 bits — donc un octet de 8 bits devient exactement deux caractères et les données grossissent de 100%. Base64 emploie soixante-quatre caractères de 6 bits, et comme le plus petit commun multiple de 8 et 6 est 24, trois octets deviennent quatre caractères : un surcoût de 33%, complété par du padding = dès que l’entrée n’est pas un multiple de trois octets.

Cette page transforme cette arithmétique en décisions : un tableau comparatif, le calcul des tailles avec un exemple détaillé, les territoires où chaque encodage est devenu la convention, et les pièges — padding, variantes d’alphabet, casse — que les décodeurs stricts rejettent. Les convertisseurs ci-dessous passent de l’un à l’autre localement, sans aucun envoi.

Pour voir la différence de taille sur vos propres données, le convertisseur Base64 vers Hex le réencode localement et affiche le doublement du nombre de caractères.

Alléger une chaîne hexadécimale en vue du transport fonctionne pareil — le convertisseur Hex vers Base64 compacte chaque groupe de trois octets en quatre caractères, entièrement dans votre navigateur.

Mêmes octets, deux alphabets

Les deux encodages résolvent un même problème : les octets sont des valeurs de 8 bits, mais les transports de texte — URL, en-têtes, XML, JSON, e-mail — préfèrent l’ASCII imprimable. L’hexadécimal puise dans les seize caractères 0-9 et a-f ; base64 puise dans A-Z, a-z, 0-9, + et /. Aucun des deux ne chiffre ni ne compresse quoi que ce soit : tous deux sont publiquement spécifiés, sans clé et instantanément réversibles, et une chaîne base64 est une sécurité de transport, pas de la sécurité.

AspectBase64Hexadécimal
Alphabet64 caractères : A-Z, a-z, 0-9, +, /16 caractères : 0-9, a-f
Bits par caractère64
Surcoût de taille+33% — 4 caractères pour 3 octets+100% — 2 caractères par octet
Padding= complète la sortie jusqu’à un multiple de 4Aucun — un octet fait toujours exactement 2 caractères
VariantesLa forme URL-safe remplace + et / par - et _Casse indifférente par convention
Territoires de prédilectionMIME, JWT, data: URIs, cookiesSommes de contrôle, UUID, adresses MAC, dumps hexadécimaux
NormeRFC 4648, sections 4 et 5RFC 4648, section 8

L’arithmétique : un tiers contre un doublement

L’hexadécimal est aligné sur les demi-octets : un octet se scinde en deux moitiés de 4 bits, chacune rendue comme un caractère, donc les longueurs sont prévisibles — une valeur de n octets fait toujours 2n caractères, sans padding ni cas particuliers. Base64 regroupe les bits en tranches de 6 bits, et 24 bits est le premier point où le monde des octets et celui de base64 s’alignent, si bien que trois octets deviennent quatre caractères. Un octet restant se complète avec ==, deux avec un seul =.

Un exemple en paire rend le ratio concret : les octets de « Hi » s’écrivent 48 69 en hexadécimal — quatre caractères — et SGk= en base64 — quatre caractères également, padding compris. Aux tailles réelles, l’écart devient dominant : un mégaoctet de données devient environ 1.33 MB en base64 avec padding, mais exactement 2 MB en hexadécimal, d’où la standardisation de base64 pour le transport en masse tandis que les valeurs courtes restaient hexadécimales.

Là où chaque encodage s’est installé

Base64 règne sur le volume et le transport. MIME l’emploie pour les pièces jointes d’e-mail, l’authentification HTTP Basic encode les identifiants avec lui, les JWT passent leur en-tête, leur charge utile et leur signature en base64url, les data: URIs intègrent images et polices directement dans les pages et les feuilles de style, et les cookies transportent des valeurs base64url parce que + et / se comportent mal dans les URL et les en-têtes. Partout où du binaire doit survivre à un tuyau purement textuel au moindre coût, base64 est la réponse.

L’hexadécimal règne sur le petit et le vérifié à l’œil. Les empreintes cryptographiques s’impriment en hexadécimal par convention — sorties SHA-256, identifiants de commit git — parce que des paires de largeur fixe, sans padding et alignées sur les octets se comparent trivialement à l’œil ou à voix haute. Les adresses MAC, la forme textuelle des UUID et les couleurs CSS comme #RRGGBB sont toutes hexadécimales, et les éditeurs hexadécimaux, dumps mémoire et débogueurs de protocole l’emploient parce que chaque octet s’y lit comme une unité autonome.

Pièges et critères de choix

Les pièges de base64 tiennent tous à l’alphabet. Les variantes standard et URL-safe diffèrent de deux caractères et ne doivent jamais être mélangées ; le padding est exigé par les décodeurs stricts mais supprimé par la convention JWT ; la sortie est sensible à la casse ; et MIME coupe les lignes à 76 caractères. L’hexadécimal n’en a qu’un : la casse. Les minuscules sont la convention et les majuscules apparaissent dans certains outils, mais les mélanger est purement cosmétique — tout décodeur strict accepte les deux.

Donc : choisissez base64 quand le volume compte ou qu’un protocole l’exige — pièces jointes, jetons, binaire embarqué. Choisissez l’hexadécimal pour les valeurs courtes que des humains compareront, copieront ou débogueront : empreintes, identifiants, couleurs. Le choix s’inverse sans cesse dans les systèmes réels — un JWT arrive en base64url et son empreinte SHA-256 est hexadécimale — et les convertisseurs ci-dessous assurent la traversée dans votre navigateur.

Questions fréquentes

Lequel est plus compact, base64 ou hexadécimal ?

Base64, toujours et exactement. L’hexadécimal écrit 2 caractères par octet ; base64 en écrit 4 pour 3 octets, donc à entrée égale la sortie base64 fait les deux tiers de la longueur de l’hexadécimal. Concrètement, un mégaoctet de données devient environ 1.33 MB en base64 avec padding, contre exactement 2 MB en hexadécimal.

Base64 est-il du chiffrement, ou cache-t-il quelque chose ?

Non — aucun des deux encodages n’offre le secret. Ce sont des transformations sans clé, publiquement spécifiées, que n’importe qui peut inverser instantanément : une chaîne base64 d’un mot de passe se décode en ce mot de passe partout. Elles résolvent le transport, pas la confidentialité — faire survivre des données binaires à un canal purement textuel. Pour le secret, il faut du chiffrement, après quoi le chiffré peut encore être encodé en base64 pour le transport.

Les convertisseurs base64 et hex envoient-ils mes données ?

Non. Encodage, décodage et conversion s’exécutent tous dans votre onglet ; il n’existe aucun point d’envoi, et la Content-Security-Policy du site n’autorise les requêtes réseau que vers elle-même. Observez le panneau Network de DevTools pendant une conversion : aucune requête sortante — les données, y compris les secrets collés par erreur, ne quittent jamais l’onglet.

Pourquoi les hash et les sommes de contrôle s’affichent-ils en hexadécimal ?

Une convention durcie par la mécanique. La sortie hexadécimale est de largeur fixe, n’exige aucun padding, et les deux caractères de chaque octet s’alignent, si bien que comparaisons et diffs coïncident visuellement ; un alphabet purement alphanumérique survit au copier-coller, aux logs et aux CSV. Tous les outils, d’openssl à git, impriment les empreintes en hexadécimal : l’hexadécimal est donc ce que les humains ont appris à lire.

Qu’est-ce que base64url et quand est-il nécessaire ?

La variante URL-safe de la section 5 de la RFC 4648 : moins et tiret bas remplacent plus et barre oblique, parce que + se lit comme une espace dans l’encodage des formulaires et que / casse les segments de chemin. Les JWT, les cookies et les paramètres de requête l’emploient pour que les jetons traversent les URL intacts. Les décodeurs devraient accepter les deux alphabets ; les stricts rejettent un mélange.

Pourquoi base64 se termine-t-il parfois par = ou == ?

Du padding. La sortie base64 doit être un multiple de quatre caractères, et quand l’entrée n’est pas un multiple de trois octets, un ou deux caractères = complètent le dernier groupe : un octet restant ajoute ==, deux ajoutent un seul =. L’hexadécimal n’a jamais besoin de padding, puisque deux caractères par octet se divisent toujours exactement.

Où puis-je lire les normes citées ici ?

  • RFC 4648 — Les encodages de données Base16, Base32 et Base64