Comment encoder en Base58
- Tapez ou collez du texte dans Entrée · Texte. La chaîne Base58 apparaît dans Sortie · Base58 au fil de la saisie.
- Choisissez l’Alphabet sous la sortie : Bitcoin (par défaut, également utilisé par IPFS et Solana), Flickr ou Ripple.
- Pour encoder des octets bruts plutôt que du texte, réglez De sur Hex ou Base64 et collez les octets sous cette forme. Une clé publique ou un hachage, ce sont presque toujours des octets, pas du texte.
- Cliquez sur Base58 → Texte dans le sélecteur de sens pour décoder, ou ouvrez le décodeur Base58, qui affiche les octets en hex.
Comment fonctionne l’encodage Base58
Base58 ne découpe pas l’entrée en groupes de bits fixes comme le fait Base64. Il lit tous les octets comme un seul nombre big-endian, écrit ce nombre en base 58, puis ajoute un 1 pour chaque octet nul de tête. C’est pourquoi un seul octet modifié peut changer toute la chaîne, et pourquoi la longueur dépend de la valeur et pas seulement du nombre d’octets.
Le coût de ce traitement en un seul nombre augmente vite avec la taille : cet outil limite donc l’entrée Base58 à 64 Ko. C’est bien plus que ce dont a besoin une clé, un hachage ou une adresse.
Les trois alphabets Base58
Les trois utilisent les mêmes 58 caractères (chiffres et lettres sans 0, O, I, l), dans un ordre différent :
| Alphabet | Commence par | Hello | 0x00 0x00 0x01 |
|---|---|---|---|
| Bitcoin | 123456789ABC… | 9Ajdvzr | 112 |
| Flickr | 123456789abc… | 9aJCVZR | 112 |
| Ripple | rpshnaf39wBU… | 9wjdvzi | rrp |
Flickr inverse majuscules et minuscules ; Flickr l’utilisait pour les URL courtes de ses photos. L’alphabet Ripple commence par r : les adresses du XRP Ledger, dont l’octet de version vaut zéro, commencent donc par r comme les adresses Bitcoin commencent par 1. Décoder avec le mauvais alphabet fonctionne généralement sans erreur et donne d’autres octets : vérifiez d’abord l’alphabet quand une valeur ne correspond pas.
Les zéros de tête et le préfixe 1
Comme Base58 traite les données comme un nombre, les octets nuls du début disparaîtraient. Le format les conserve en écrivant un 1 par octet nul :
| Octets (hex) | Base58 |
|---|---|
00 | 1 |
00 00 | 11 |
00 01 | 12 |
ff | 5Q |
31 × 00, puis ff | 11111111111111111111111111111115Q |
32 × 00 | 11111111111111111111111111111111 |
La dernière ligne est une vraie adresse : trente-deux 1, c’est le System Program de Solana, dont la clé publique est faite de 32 octets nuls. Les zéros de tête sont l’endroit où le code Base58 écrit à la main se trompe le plus souvent, et un encodeur qui les supprime produit des chaînes qui se décodent en moins d’octets.
Où Base58 est utilisé
- Adresses Bitcoin et clés WIF. Les adresses legacy (
1…,3…) et les clés privées WIF (5…,K…,L…) sont du Base58Check : du Base58 avec un octet de version et une somme de contrôle. Les adresses Bech32 (bc1…) sont un autre encodage. - CIDv0 IPFS. Les identifiants
Qm…sont du Base58 simple d’un multihash de 34 octets :12(SHA-256),20(32 octets de long) et l’empreinte. C’est l’en-tête12 20qui fait commencer chaque CIDv0 parQm. - Solana. Les adresses et les clés publiques sont du Base58 de 32 octets (32 à 44 caractères) ; les signatures de transactions sont du Base58 de 64 octets (jusqu’à 88 caractères).
Base58 en Python
Python n’a pas de Base58 dans sa bibliothèque standard. L’algorithme est assez court pour l’écrire soi-même, et cette version gère les zéros de tête :
ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
def b58encode(data: bytes) -> str:
n = int.from_bytes(data, "big")
out = ""
while n:
n, r = divmod(n, 58)
out = ALPHABET[r] + out
zeros = len(data) - len(data.lstrip(b"\0"))
return "1" * zeros + out
b58encode(b"Hello") # '9Ajdvzr'
b58encode(bytes(32)) # '11111111111111111111111111111111'
Pour du code de production, un paquet maintenu comme base58 sur PyPI gère aussi Base58Check. Les méthodes d’encodage générales en Python se trouvent sur la page Python.
FAQ
Quels caractères Base58 exclut-il ?
Base58, c’est Base62 moins quatre caractères qui se ressemblent : 0 (zéro), O (o majuscule), I (i majuscule) et l (L minuscule). Il n’a pas non plus de +, / ou = : une chaîne Base58 se sélectionne d’un double-clic comme un seul mot et s’utilise dans une URL sans échappement.
Pourquoi la sortie Base58 commence-t-elle par 1 ?
Chaque 1 représente un octet nul en tête de l’entrée. Un simple nombre perdrait ces zéros : Base58 les écrit donc explicitement. Les adresses Bitcoin commencent par 1 parce que leur octet de version vaut 0x00.
Base58 et Base58Check, est-ce la même chose ?
Non. Base58Check, c’est Base58 appliqué à un payload suivi d’une somme de contrôle de 4 octets en double SHA-256. Les adresses Bitcoin et les clés privées WIF l’utilisent ; les adresses Solana et les CIDv0 IPFS utilisent du Base58 simple. Utilisez l’outil Base58Check pour la forme avec somme de contrôle.
De combien Base58 est-il plus long que l'entrée ?
D’environ 37 % pour des données aléatoires (log 256 / log 58 ≈ 1,366), un peu plus que les 33 % de Base64. La longueur exacte dépend de la valeur : 32 octets aléatoires donnent 43 ou 44 caractères, alors que 32 octets nuls donnent 32 caractères 1.