So kodieren Sie in Base58
- Tippen oder fügen Sie Text in Eingabe · Text ein. Die Base58-Zeichenkette erscheint schon während der Eingabe in Ausgabe · Base58.
- Wählen Sie das Alphabet unter der Ausgabe: Bitcoin (Standard, auch von IPFS und Solana verwendet), Flickr oder Ripple.
- Um rohe Bytes statt Text zu kodieren, stellen Sie Von auf Hex oder Base64 und fügen die Bytes in dieser Form ein. Ein Public Key oder Hash besteht fast immer aus Bytes, nicht aus Text.
- Klicken Sie im Richtungsschalter auf Base58 → Text, um zu dekodieren, oder öffnen Sie den Base58-Decoder, der die Bytes als Hex zeigt.
So funktioniert die Base58-Kodierung
Base58 zerlegt die Eingabe nicht wie Base64 in feste Bitgruppen. Es liest alle Bytes als eine große Big-Endian-Zahl, schreibt diese Zahl zur Basis 58 und fügt dann für jedes führende Nullbyte eine 1 hinzu. Deshalb kann ein einziges geändertes Byte die ganze Zeichenkette verändern, und deshalb hängt die Länge vom Wert ab und nicht nur von der Byteanzahl.
Der Aufwand, die Daten als eine Zahl zu behandeln, wächst mit der Größe schnell, daher begrenzt dieses Tool Base58-Eingaben auf 64 KB. Das ist weit mehr, als ein Schlüssel, Hash oder eine Adresse braucht.
Die drei Base58-Alphabete
Alle drei verwenden dieselben 58 Zeichen (Ziffern und Buchstaben ohne 0, O, I, l), nur in anderer Reihenfolge:
| Alphabet | Beginnt mit | Hello | 0x00 0x00 0x01 |
|---|---|---|---|
| Bitcoin | 123456789ABC… | 9Ajdvzr | 112 |
| Flickr | 123456789abc… | 9aJCVZR | 112 |
| Ripple | rpshnaf39wBU… | 9wjdvzi | rrp |
Flickr vertauscht Groß- und Kleinbuchstaben; Flickr nutzte das für kurze Foto-URLs. Das Ripple-Alphabet beginnt mit r, daher beginnen Adressen im XRP Ledger, die ein Versionsbyte null haben, mit r, so wie Bitcoin-Adressen mit 1. Dekodieren mit dem falschen Alphabet klappt meist ohne Fehlermeldung und ergibt andere Bytes, prüfen Sie also zuerst das Alphabet, wenn ein Wert nicht passt.
Führende Nullen und das Präfix 1
Weil Base58 Daten als Zahl behandelt, würden Nullbytes am Anfang verschwinden. Das Format bewahrt sie, indem es pro Nullbyte eine 1 schreibt:
| Bytes (Hex) | Base58 |
|---|---|
00 | 1 |
00 00 | 11 |
00 01 | 12 |
ff | 5Q |
31 × 00, dann ff | 11111111111111111111111111111115Q |
32 × 00 | 11111111111111111111111111111111 |
Die letzte Zeile ist eine echte Adresse: Zweiunddreißig 1 sind das Solana System Program, dessen Public Key aus 32 Nullbytes besteht. Bei führenden Nullen geht selbst geschriebener Base58-Code am häufigsten schief, und ein Encoder, der sie verwirft, erzeugt Zeichenketten, die zu weniger Bytes dekodiert werden.
Wo Base58 verwendet wird
- Bitcoin-Adressen und WIF-Schlüssel. Legacy-Adressen (
1…,3…) und private WIF-Schlüssel (5…,K…,L…) sind Base58Check: Base58 mit einem Versionsbyte und einer Prüfsumme. Bech32-Adressen (bc1…) sind eine andere Kodierung. - IPFS CIDv0. Die Kennungen
Qm…sind reines Base58 eines 34-Byte-Multihash:12(SHA-256),20(32 Bytes lang) und der Digest. Der Header12 20sorgt dafür, dass jede CIDv0 mitQmbeginnt. - Solana. Adressen und Public Keys sind Base58 von 32 Bytes (32 bis 44 Zeichen); Transaktionssignaturen sind Base58 von 64 Bytes (bis zu 88 Zeichen).
Base58 in Python
Python hat kein Base58 in der Standardbibliothek. Der Algorithmus ist kurz genug, um ihn auszuschreiben, und diese Version behandelt führende Nullen:
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'
Für Produktionscode deckt ein gepflegtes Paket wie base58 auf PyPI auch Base58Check ab. Allgemeine Muster zum Kodieren in Python finden Sie auf der Python-Seite.
Häufige Fragen
Welche Zeichen lässt Base58 weg?
Base58 ist Base62 ohne vier leicht verwechselbare Zeichen: 0 (Null), O (großes O), I (großes i) und l (kleines L). Außerdem fehlen +, / und =, eine Base58-Zeichenkette lässt sich also per Doppelklick als ein Wort markieren und ohne Maskierung in einer URL verwenden.
Warum beginnt die Base58-Ausgabe mit 1?
Jede 1 steht für ein führendes Nullbyte der Eingabe. Eine reine Zahl würde diese Nullen verlieren, daher schreibt Base58 sie ausdrücklich aus. Bitcoin-Adressen beginnen mit 1, weil ihr Versionsbyte 0x00 ist.
Ist Base58 dasselbe wie Base58Check?
Nein. Base58Check ist Base58, angewendet auf Nutzdaten mit angehängter 4-Byte-Prüfsumme aus doppeltem SHA-256. Bitcoin-Adressen und private WIF-Schlüssel verwenden es; Solana-Adressen und IPFS CIDv0 verwenden reines Base58. Für die Form mit Prüfsumme nehmen Sie das Base58Check-Tool.
Wie viel länger als die Eingabe ist Base58?
Bei Zufallsdaten etwa 37 % (log 256 / log 58 ≈ 1,366), etwas mehr als die 33 % von Base64. Die genaue Länge hängt vom Wert ab: 32 Zufallsbytes ergeben 43 oder 44 Zeichen, 32 Nullbytes dagegen 32 Einsen.