So kodieren und dekodieren Sie Base58Check
Zum Kodieren:
- Fügen Sie das Hex in Eingabe · Hex ein: zuerst das Versionsbyte, dann die Nutzdaten. Leerzeichen, Doppelpunkte und
0x-Präfixe werden akzeptiert. - Lesen Sie das Ergebnis in Ausgabe · Base58Check. Das Tool berechnet die Prüfsumme und hängt sie vor dem Kodieren an.
- Lassen Sie das Alphabet für Bitcoin und die meisten Forks auf Bitcoin.
Zum Dekodieren klicken Sie im Richtungsschalter auf Base58Check → Hex und fügen die Adresse oder den Schlüssel ein. Der Decoder wandelt sie um, berechnet die Prüfsumme neu und gibt die Nutzdaten (weiterhin mit dem Versionsbyte am Anfang) nur zurück, wenn alle 4 Prüfsummenbytes übereinstimmen. Ein einziges vertipptes Zeichen ergibt „Prüfsumme stimmt nicht: Die Zeichenkette ist vertippt oder beschädigt.“
Was Base58Check zu Base58 hinzufügt
Reines Base58 hat keine Fehlererkennung: Ein Tippfehler ergibt eine andere, aber ebenso gültige Zeichenkette. Base58Check behebt das mit zwei Ergänzungen:
version (1 byte) | payload | first 4 bytes of SHA-256(SHA-256(version | payload))
Das Ganze wird dann Base58-kodiert, führende Nullbytes werden also zu 1. Das Versionsbyte bestimmt das Netzwerk und die Art der Daten, und weil es vorn in der Zahl steht, legt es auch das erste Zeichen des Ergebnisses fest.
Versionsbytes und Präfixe
Derselbe 20-Byte-Hash, 62e907b15cbf27d5425399ebf6f0fb50ebb88f18, mit verschiedenen Versionsbytes:
| Version | Bedeutung | Erstes Zeichen | Ergebnis |
|---|---|---|---|
00 | Bitcoin-P2PKH-Adresse | 1 | 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa |
05 | Bitcoin-P2SH-Adresse | 3 | 3Ai1JZ8pdJb2ksieUV8FsxSNVJCpoPi8W6 |
6f | Testnet-P2PKH-Adresse | m oder n | mpXwg4jMtRhuSpVq4xS3HFHmCmWp9NyGKt |
c4 | Testnet-P2SH-Adresse | 2 | 2N2GDNJ4rEm6NxfMC9ck8VuRdheQzXWaNZv |
Die erste Zeile ist die Adresse, die die Belohnung des Bitcoin-Genesis-Blocks erhalten hat. Die anderen Zeilen veranschaulichen nur das Versionsbyte: Wer einen Public-Key-Hash in ein P2SH-Versionsbyte verpackt, erhält keine nutzbare P2SH-Adresse, denn P2SH hasht ein Skript.
Private WIF-Schlüssel
Das Wallet Import Format ist Base58Check mit dem Versionsbyte 80 und einem 32-Byte-Private-Key. Ein angehängtes Byte 01 kennzeichnet einen Schlüssel, dessen Public Key in komprimierter Form verwendet wird. Mit dem bekannten Beispielschlüssel aus dem Bitcoin-Wiki:
| Hex-Eingabe | Base58Check |
|---|---|
80 + 0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D | 5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ |
derselbe + 01 | KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617 |
Unkomprimierte WIF-Schlüssel beginnen mit 5, komprimierte mit K oder L. Dieser Beispielschlüssel ist öffentlich; verwenden Sie ihn nie für echtes Guthaben.
Base58Check in Python
Die Prüfsumme besteht aus zwei SHA-256-Aufrufen aus der Standardbibliothek. Mit einem kleinen Base58-Encoder:
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'
Um eine Zeichenkette im Code zu prüfen, dekodieren Sie sie mit Base58, trennen die letzten 4 Bytes ab und vergleichen sie mit dem doppelten Hash des Rests. Mehr zum Umgang mit Bytes in Python finden Sie auf der Python-Seite.
Häufige Probleme
- Prüfsumme stimmt nicht. Die Zeichenkette enthält einen Tippfehler, wurde abgeschnitten oder ist reines Base58 ohne Prüfsumme (Solana-Adressen und IPFS-Hashes sind reines Base58; nehmen Sie für sie den Base58-Decoder).
- „Zu kurz für die 4-Byte-Prüfsumme“. Der dekodierte Wert hat weniger als 4 Bytes und kann daher kein Base58Check sein.
- Unerwartetes Zeichen
"0","O","I"oder"l". Gehört nicht zum Base58-Alphabet; prüfen Sie die Abschrift. - Falsches erstes Zeichen nach dem Kodieren. Prüfen Sie das Versionsbyte. Ohne Versionsbyte ergibt ein 20-Byte-Hash meist eine Zeichenkette, die nicht mit
1beginnt.
Häufige Fragen
Wie wird die Base58Check-Prüfsumme berechnet?
Hashen Sie die Nutzdaten (einschließlich Versionsbyte) mit SHA-256, hashen Sie das Ergebnis noch einmal mit SHA-256 und nehmen Sie die ersten 4 Bytes. Diese 4 Bytes werden vor der Base58-Kodierung angehängt.
Heißt eine gültige Prüfsumme, dass ich bedenkenlos an die Adresse senden kann?
Sie heißt, dass die Zeichenkette nicht vertippt wurde: Ein zufälliger Tippfehler kommt mit einer Wahrscheinlichkeit von etwa 1 zu 4,3 Milliarden durch. Darüber, wer die Adresse kontrolliert oder ob sie zu dem Netzwerk gehört, das Sie annehmen, sagt sie nichts.
Kann Base58Check bc1-Adressen dekodieren?
Nein. Adressen, die mit bc1 beginnen, sind Bech32 oder Bech32m (SegWit und Taproot) und verwenden ein anderes Alphabet und eine andere Prüfsumme.
Sollte ich hier einen echten privaten Schlüssel einfügen?
Die Umwandlung läuft in Ihrem Browser, und die Seite blockiert alle Netzwerkanfragen außer dem Seitenaufrufzähler von Cloudflare, aber ein WIF-Schlüssel verfügt über Guthaben. Nehmen Sie für alles, was Wert hat, einen Testschlüssel oder einen Offline-Rechner.