Comment utiliser l’encodeur Base16
- Tapez ou collez du texte dans l’entrée. Le Base16 s’affiche dans la sortie au fil de la saisie.
- Le Jeu de caractères sous l’entrée décide de la façon dont les caractères deviennent des octets. UTF-8 est la valeur par défaut.
- Pour décoder, cliquez sur Base16 (RFC 4648) → Texte au-dessus de l’outil, ou sur le bouton ⇄ Inverser, qui déplace aussi la sortie actuelle dans l’entrée. Les chiffres en minuscules, les espaces et les deux-points sont acceptés dans l’entrée.
- Copier la sortie ou Télécharger le résultat. Les menus De et Vers passent à d’autres formats, comme Base32 ou Base64, pour comparer.
Pour de l’hex avec séparateurs, préfixes 0x ou sortie en minuscules, Texte en hex propose ces options.
Base16 et la RFC 4648
La RFC 4648 définit Base64, Base32 et Base16 côte à côte, et Base16 est le plus simple des trois : il n’a ni remplissage, ni sauts de ligne, ni regroupement de bits. Chaque octet est coupé en deux moitiés de 4 bits, et chaque moitié correspond à un caractère. Les vecteurs de test de la RFC elle-même :
| Entrée | Base16 |
|---|---|
| (vide) | (vide) |
f | 66 |
fo | 666F |
foo | 666F6F |
foob | 666F6F62 |
fooba | 666F6F6261 |
foobar | 666F6F626172 |
La sortie compte toujours exactement deux fois plus de caractères que l’entrée ne compte d’octets : Base16 n’a donc pas besoin de caractère de remplissage. Base64 et Base32 regroupent plusieurs octets par bloc et doivent compléter le dernier bloc avec =. La présentation des RFC indique où chacun de ces encodages est spécifié.
Base16, Base32 et Base64 comparés
Les 12 octets de Hello, world dans chaque encodage de la RFC 4648 :
| Encodage | Sortie | Longueur |
|---|---|---|
| Base16 | 48656C6C6F2C20776F726C64 | 24 |
| Base32 | JBSWY3DPFQQHO33SNRSA==== | 24 (20 sans remplissage) |
| Base64 | SGVsbG8sIHdvcmxk | 16 |
Base16 sacrifie la taille au profit de la clarté. On y lit directement les octets et on compare les valeurs chiffre par chiffre, et il résiste à tout système qui gère des lettres et des chiffres, y compris ceux qui ignorent la casse. Base64 est d’un tiers plus court et c’est le choix par défaut quand les octets doivent voyager dans du JSON, un e-mail ou une URL. La comparaison des encodages va plus loin, Base58 et Base85 compris.
Où l’on rencontre Base16
- Les empreintes de hachage et les sommes de contrôle, généralement affichées en minuscules par
sha256sumet les outils similaires. - Les empreintes de clés OpenPGP, que GnuPG affiche en hex majuscule par groupes de quatre.
- Les vecteurs de test des RFC et d’autres spécifications, où des valeurs d’octets sans ambiguïté comptent plus que la longueur.
- Les protocoles et formats qui exigent des données insensibles à la casse ou purement alphanumériques.
Pour faire passer une telle valeur en Base64, par exemple une empreinte qu’une API attend en Base64, utilisez Hex en Base64 ; Base64 en hex fait l’inverse.
Base16 dans le code
import base64
base64.b16encode(b"Hello").decode() # '48656C6C6F'
base64.b16decode("48656c6c6f", casefold=True) # b'Hello'
printf 'Hello' | basenc --base16 # 48656C6C6F
echo 48656C6C6F | basenc --base16 -d # Hello
basenc fait partie de GNU coreutils 8.31 et ultérieur. En Node.js, Buffer.from("Hello").toString("hex").toUpperCase() donne le même résultat. Les pages Python et Bash traitent le côté Base64 de ces modules.
FAQ
Base16, est-ce la même chose que l'hexadécimal ?
Oui, pour des octets. Base16 est le nom que la RFC 4648 donne à l’encodage hex : chaque octet devient deux caractères parmi 0123456789ABCDEF. La RFC impose les majuscules ; l’hex de tous les jours est souvent en minuscules.
De combien le Base16 est-il plus gros que les données d'origine ?
Exactement deux fois, soit 100 % de surcoût. Base32 ajoute 60 % et Base64 environ 33 % : Base16 est donc le moins compact des encodages de la RFC 4648, et le plus facile à lire.
Pourquoi b16decode de Python rejette-t-il ma chaîne ?
base64.b16decode n’accepte que les majuscules par défaut. Passez casefold=True pour une entrée en minuscules, ou utilisez bytes.fromhex(), qui accepte les deux casses et les espaces.