Comment encoder et décoder du Base58Check
Pour encoder :
- Collez l’hex dans Entrée · Hex : l’octet de version d’abord, puis le payload. Les espaces, les deux-points et les préfixes
0xsont acceptés. - Lisez le résultat dans Sortie · Base58Check. L’outil calcule la somme de contrôle et l’ajoute avant l’encodage.
- Laissez l’Alphabet sur Bitcoin pour Bitcoin et la plupart de ses forks.
Pour décoder, cliquez sur Base58Check → Hex dans le sélecteur de sens et collez l’adresse ou la clé. Le décodeur la convertit, recalcule la somme de contrôle et ne renvoie le payload (qui commence toujours par l’octet de version) que si les 4 octets de la somme de contrôle correspondent. Un seul caractère mal saisi donne « somme de contrôle incorrecte : la chaîne est mal saisie ou corrompue ».
Ce que Base58Check ajoute à Base58
Le Base58 simple n’a aucune détection d’erreur : une faute de frappe donne une autre chaîne, tout aussi valide. Base58Check corrige cela avec deux ajouts :
version (1 byte) | payload | first 4 bytes of SHA-256(SHA-256(version | payload))
L’ensemble est ensuite encodé en Base58 : les octets nuls de tête deviennent donc des 1. L’octet de version choisit le réseau et le type de données, et comme il se trouve au début du nombre, il fixe aussi le premier caractère du résultat.
Octets de version et préfixes
Le même hachage de 20 octets, 62e907b15cbf27d5425399ebf6f0fb50ebb88f18, avec différents octets de version :
| Version | Signification | Premier caractère | Résultat |
|---|---|---|---|
00 | Adresse Bitcoin P2PKH | 1 | 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa |
05 | Adresse Bitcoin P2SH | 3 | 3Ai1JZ8pdJb2ksieUV8FsxSNVJCpoPi8W6 |
6f | Adresse P2PKH du testnet | m ou n | mpXwg4jMtRhuSpVq4xS3HFHmCmWp9NyGKt |
c4 | Adresse P2SH du testnet | 2 | 2N2GDNJ4rEm6NxfMC9ck8VuRdheQzXWaNZv |
La première ligne est l’adresse qui a reçu la récompense du bloc genesis de Bitcoin. Les autres lignes ne font qu’illustrer l’octet de version : envelopper un hachage de clé publique dans un octet de version P2SH ne donne pas une adresse P2SH utilisable, puisque P2SH hache un script.
Clés privées WIF
Le Wallet Import Format, c’est du Base58Check avec l’octet de version 80 et une clé privée de 32 octets. Un octet 01 final marque une clé dont la clé publique est utilisée sous forme compressée. Avec la clé d’exemple bien connue du wiki Bitcoin :
| Entrée hex | Base58Check |
|---|---|
80 + 0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D | 5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ |
la même + 01 | KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617 |
Les clés WIF non compressées commencent par 5, les compressées par K ou L. Cette clé d’exemple est publique ; ne l’utilisez jamais pour de vrais fonds.
Base58Check en Python
La somme de contrôle, ce sont deux appels SHA-256 de la bibliothèque standard. Avec un petit encodeur Base58 :
import hashlib
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
def b58check(payload: bytes) -> str:
checksum = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4]
return b58encode(payload + checksum)
b58check(bytes.fromhex("0062e907b15cbf27d5425399ebf6f0fb50ebb88f18"))
# '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'
Pour vérifier une chaîne dans du code, décodez-la en Base58, séparez les 4 derniers octets et comparez-les au double hachage du reste. D’autres manipulations d’octets en Python se trouvent sur la page Python.
Problèmes courants
- Somme de contrôle incorrecte. La chaîne contient une faute de frappe, a été tronquée, ou est du Base58 simple sans somme de contrôle (les adresses Solana et les hachages IPFS sont du Base58 simple ; utilisez pour eux le décodeur Base58).
- « Trop court pour contenir la somme de contrôle de 4 octets ». La valeur décodée fait moins de 4 octets : ce ne peut pas être du Base58Check.
- Caractère
"0","O","I"ou"l"inattendu. Absent de l’alphabet Base58 ; vérifiez la recopie. - Mauvais premier caractère après l’encodage. Vérifiez l’octet de version. Sans lui, un hachage de 20 octets s’encode généralement en une chaîne qui ne commence pas par
1.
FAQ
Comment la somme de contrôle Base58Check est-elle calculée ?
Hachez le payload (octet de version compris) avec SHA-256, hachez le résultat une seconde fois avec SHA-256, et prenez les 4 premiers octets. Ces 4 octets sont ajoutés avant l’encodage Base58.
Une somme de contrôle valide signifie-t-elle qu'on peut envoyer des fonds à l'adresse sans risque ?
Elle signifie que la chaîne n’a pas été mal saisie : une faute de frappe aléatoire passe avec une probabilité d’environ 1 sur 4,3 milliards. Elle ne dit rien de qui contrôle l’adresse ni de son appartenance au réseau que vous croyez.
Base58Check peut-il décoder les adresses bc1 ?
Non. Les adresses qui commencent par bc1 sont en Bech32 ou Bech32m (SegWit et Taproot), qui utilisent un autre alphabet et une autre somme de contrôle.
Dois-je coller une vraie clé privée ici ?
La conversion s’exécute dans votre navigateur et la page bloque toute requête réseau hormis le comptage des pages vues de Cloudflare, mais une clé WIF contrôle des fonds. Utilisez une clé de test, ou une machine hors ligne, pour tout ce qui a de la valeur.