Mode d’emploi
- Choisissez Encoder pour transformer du texte ou des octets en Z85, ou Décoder pour reconvertir du Z85 en données.
- Pour les clés et autres valeurs binaires, réglez l’entrée sur Hexa à l’encodage, ou la sortie sur Hexa au décodage.
- Saisissez, collez ou ouvrez un fichier. Le résultat se met à jour pendant la saisie.
- Copiez le résultat ou téléchargez-le sous forme de fichier.
Qu’est-ce que Z85 ?
Z85 est spécifié dans la RFC 32 de ZeroMQ (une spécification de la communauté ZeroMQ, et non une RFC de l’IETF). Comme les autres encodages Base85, il transforme chaque groupe de 4 octets en 5 caractères : il lit chaque groupe comme un nombre de 32 bits gros-boutiste (big-endian) et l’écrit sous la forme de 5 chiffres en base 85, en commençant par le poids fort. La sortie est 25 % plus grande que l’entrée.
Ce qui distingue Z85, c’est son alphabet : 0-9, a-z, A-Z et les 23 symboles .-:+=^!/*?&<>()[]{}@%$#. Il exclut les deux types de guillemets, la barre oblique inverse, l’accent grave, la virgule, le point-virgule, la barre verticale, le tilde et le tiret bas. L’alphabet a été conçu pour être sûr dans les chaînes du code source : une valeur Z85 peut être collée entre guillemets en C, en Python ou en JSON sans aucun échappement.
Où Z85 est utilisé
ZeroMQ utilise Z85 pour afficher les clés CurveZMQ. Une clé publique ou secrète de 32 octets devient une chaîne Z85 de 40 caractères : c’est la forme renvoyée par zmq_curve_keypair() et acceptée par les options de socket de la sécurité CURVE. La bibliothèque expose aussi zmq_z85_encode() et zmq_z85_decode(), et des bindings comme pyzmq fournissent les mêmes fonctions.
// C (libzmq)
char text[41]; // 32 octets -> 40 caractères + NUL
zmq_z85_encode(text, key, 32);
# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b')) # b'HelloWorld'
La dernière ligne reprend le vecteur de test de la spécification.
Longueur de l’entrée : remarque sur cet outil
La RFC 32 exige que l’entrée binaire soit un multiple de 4 octets et la chaîne encodée un multiple de 5 caractères. Elle ne définit aucun remplissage, et les implémentations strictes comme zmq_z85_encode() refusent les autres longueurs.
Cet outil accepte aussi d’autres longueurs, en appliquant la même règle qu’Ascii85 et Base85 : un dernier groupe de n octets devient n + 1 caractères. Il s’agit d’une extension non standard. Une sortie produite de cette façon peut être refusée par d’autres décodeurs Z85 : complétez donc vos données jusqu’à un multiple de 4 octets lorsque vous avez besoin de compatibilité. Les clés CurveZMQ font 32 octets et conviennent toujours.
Spécifications
| Alphabet | 0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$# |
|---|---|
| Taille de sortie | 5 caractères pour 4 octets (125 %) |
| Remplissage | Aucun |
| Norme | ZeroMQ RFC 32 |
| 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
Quelle est la différence entre Z85 et Ascii85 ?
! à u, qui comprend les guillemets et la barre oblique inverse, et dispose d’un raccourci z pour les octets nuls. Z85 évite les caractères qui doivent être échappés dans les chaînes et n’a pas de raccourci.Z85 utilise-t-il du remplissage ?
Non. La spécification n’autorise que des longueurs d’entrée multiples de 4 octets. Cet outil encode les autres longueurs avec un dernier groupe plus court, ce qui ne fait pas partie de la norme.
Puis-je utiliser Z85 en JSON, en XML ou dans des URL ?
Quelle est la longueur d’une clé CurveZMQ encodée en Z85 ?
Une clé CurveZMQ fait 32 octets : elle s’encode donc en exactement 40 caractères. Pour voir la clé brute, décodez-la ici avec la sortie Hexa.