Mode d’emploi
- Choisissez Encoder pour transformer du texte ou des octets en Base85, ou Décoder pour reconvertir du Base85 en données.
- Saisissez ou collez votre entrée, ou ouvrez un fichier. Passez l’entrée en Hexa si vous travaillez avec des octets bruts.
- Le résultat se met à jour pendant la saisie. Au décodage, choisissez la sortie Texte ou Hexa selon le contenu des données.
- Copiez le résultat ou téléchargez-le sous forme de fichier.
Qu’est-ce que Base85 ?
Base85 désigne une famille d’encodages qui transforment chaque groupe de 4 octets en 5 caractères. Cinq chiffres en base 85 peuvent représenter 85 × 85 × 85 × 85 × 85 = 4 437 053 125 valeurs, juste assez pour n’importe quel nombre de 32 bits : la sortie n’est donc que 25 % plus grande que l’entrée, contre 33 % pour Base64.
Il existe plusieurs alphabets Base85, qui ne sont pas interchangeables : Ascii85 (Adobe, PDF), Z85 (ZeroMQ) et celui de cette page. Ce dernier utilise 0-9, A-Z, a-z et 23 symboles : !#$%&()*+-;<=>?@^_`{|}~. Les guillemets simples et doubles, la virgule, le point, la barre oblique, les deux-points, la barre oblique inverse et les crochets en sont exclus.
RFC 1924, Git et Python
Le jeu de caractères provient de la RFC 1924, « A Compact Representation of IPv6 Addresses », publiée le 1er avril 1996 en guise de poisson d’avril. Elle proposait d’écrire une adresse IPv6 de 128 bits sous la forme d’un seul nombre en base 85 d’exactement 20 caractères. Personne n’écrit les adresses IPv6 ainsi, mais l’alphabet a ensuite été repris pour des données binaires quelconques :
- Git stocke les fichiers binaires des patchs (
git diff --binary,git format-patch) sous forme de données compressées avec zlib et encodées avec cet alphabet, avec un caractère de longueur au début de chaque ligne. - Python 3.4 et les versions ultérieures fournissent
base64.b85encode()etb85decode(), dont la sortie correspond à celle de cet outil. - Mercurial utilise le même encodage pour les fichiers binaires dans les diffs au format Git.
Notez que la RFC 1924 convertit l’adresse de 128 bits d’un seul bloc, alors que Git, Python et cet outil travaillent par groupes de 4 octets : une valeur de 16 octets donne donc un résultat différent de celui obtenu avec la méthode de la RFC.
Groupes finaux incomplets
Lorsque la longueur de l’entrée n’est pas un multiple de 4, le dernier groupe est complété par des octets nuls, encodé, puis seuls ses n + 1 premiers caractères sont conservés : 1 octet donne 2 caractères, 2 octets en donnent 3 et 3 octets en donnent 4. Le décodeur inverse l’opération, si bien qu’aucun caractère de remplissage n’est nécessaire. Contrairement au z d’Ascii85, cette variante n’a pas de raccourci pour les octets nuls.
# Python 3.4+
import base64
base64.b85encode(b'hello') # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv') # b'hello'
Spécifications
| Alphabet | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| Taille de sortie | 5 caractères pour 4 octets (125 %) |
| Remplissage | Aucun |
| Norme | Jeu de caractères de la RFC 1924 (Git, Python b85) |
| Sensible à la casse | Oui |
Exemples
| Entrée (UTF-8) | Sortie |
|---|---|
Hello, World! | NM&qnZ!92JZ*pv8Ap |
Base64.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
Questions fréquentes
Base85 est-il identique à Ascii85 ?
z et peut être entouré des délimiteurs Adobe. Utilisez la page Ascii85 pour les données PDF et PostScript.La RFC 1924 était-elle une vraie norme ?
Non. C’est une RFC informative publiée comme poisson d’avril, qui n’a jamais servi pour les adresses IPv6. Son jeu de caractères est devenu populaire plus tard grâce à Git et Python.
De combien la sortie Base85 est-elle plus grande ?
Puis-je placer du Base85 dans du JSON ou du XML ?
<, > et & doivent être échappés. Base85 n’est pas compatible URL.