Koder i dekoder Base58

Zamień tekst, bajty szesnastkowe lub małe pliki na Base58 i z powrotem. Wybierz alfabet Bitcoin, Flickr lub Ripple i w razie potrzeby dodaj lub zweryfikuj sumę kontrolną Base58Check.

Działa w całości w przeglądarce. Nic nie jest wysyłane.

Jak używać

  1. Wybierz „Koduj”, aby zamienić tekst lub bajty na Base58, albo „Dekoduj”, aby odtworzyć dane z ciągu Base58.
  2. Wybierz alfabet w opcji „Alfabet”. Domyślnie ustawiony jest Bitcoin, którego używają również IPFS i Solana.
  3. Wpisz lub wklej dane wejściowe. Jeśli masz surowe bajty, np. skrót lub klucz publiczny, ustaw „Wejście jako” na „Hex”.
  4. Włącz opcję „Suma kontrolna Base58Check” tylko wtedy, gdy ciąg zawiera 4-bajtową sumę kontrolną, a następnie skopiuj lub pobierz wynik.

Czym jest Base58?

Base58 to kodowanie binarno-tekstowe opracowane na potrzeby Bitcoina. Jego alfabet powstaje z 62 cyfr i liter łacińskich po usunięciu czterech znaków, które łatwo pomylić: 0 (zero), O (wielkie o), I (wielkie i) i l (małe L). Nie zawiera też znaków +, / ani =, dzięki czemu ciąg Base58 można zaznaczyć podwójnym kliknięciem i umieścić w adresie URL bez kodowania znaków.

W przeciwieństwie do Base64 Base58 nie dzieli danych na grupy bitów. Całe wejście jest traktowane jako jedna duża liczba zapisana w systemie o podstawie 58, dlatego nie ma dopełnienia, a zmiana jednego bajtu może zmienić wiele znaków wyniku. Wiodące bajty zerowe nie mają wartości liczbowej, więc aby je zachować, każdy z nich zapisuje się jako pierwszy znak alfabetu (1 w alfabecie Bitcoin). Wynik jest ok. 1,37 raza większy od danych wejściowych.

Gdzie używa się Base58

  • Bitcoin. Starsze adresy (legacy) i klucze prywatne WIF są zapisywane w Base58Check, czyli w Base58 z bajtem wersji i sumą kontrolną.
  • IPFS. Identyfikator treści w wersji 0 (CIDv0) to zapis Base58 skrótu multihash SHA-256, dlatego takie identyfikatory CID mają 46 znaków i zaczynają się od Qm.
  • Solana. Klucze publiczne, adresy kont i podpisy transakcji są zapisywane w zwykłym Base58, bez sumy kontrolnej. 32-bajtowy klucz zajmuje zwykle 43 lub 44 znaki.
  • Flickr i XRP Ledger. Krótkie linki Flickr używają alfabetu Flickr, a adresy XRP alfabetu Ripple, dlatego zaczynają się od r.

Do konwersji między Base58 a surowymi bajtami służą narzędzia Base58 na Hex i Hex na Base58. Jeśli identyfikatory mają zawierać tylko litery i cyfry, warto porównać to kodowanie z Base62.

Alfabety Base58

AlfabetZnaki w kolejności
Bitcoin123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Flickr123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
Ripplerpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz

Wszystkie trzy zawierają te same 58 znaków w innej kolejności, więc ciąg zakodowany jednym alfabetem po zdekodowaniu innym daje inne bajty albo błąd.

Base58 w kodzie

# Python (pip install base58)
import base58
base58.b58encode(b'hello')      # b'Cn8eVZg'
base58.b58decode('Cn8eVZg')     # b'hello'

// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(new TextEncoder().encode('hello'));

Specyfikacja

Alfabet1-9 A-Z a-z bez 0 O I l
Rozmiar wynikuOk. 137% (arytmetyka dużych liczb)
DopełnienieBrak (wiodące bajty zerowe zamieniają się w 1)
StandardBitcoin Base58
Rozróżnia wielkość literTak

Przykłady

Wejście (UTF-8)Wyjście
Hello, World!72k1xXWG59fYdzSNoA
Base64.isr1Nm3AS7ZcnN
你好2xuZUfBKa

Najczęściej zadawane pytania

Dlaczego wiodące bajty zerowe zamieniają się w 1?
Base58 zamienia dane wejściowe na jedną liczbę, a wiodące bajty zerowe nie zmieniają jej wartości. Aby je zachować, każdy wiodący bajt zerowy zapisuje się jako pierwszy znak alfabetu, czyli 1 w alfabecie Bitcoin. Dlatego 32 bajty zerowe dają ciąg 32 jedynek.
Czy Base58 rozróżnia wielkość liter?

Tak. Wielkie i małe litery to różne cyfry, więc zmiana wielkości choćby jednej litery zmienia zdekodowane bajty lub sprawia, że ciąg staje się nieprawidłowy.

Czym różni się Base58 od Base58Check?
Base58Check przed kodowaniem dołącza 4-bajtową sumę kontrolną (początek podwójnego skrótu SHA-256), dzięki czemu można wykryć błędy przy przepisywaniu. Włącz tutaj opcję „Suma kontrolna Base58Check” lub zajrzyj na stronę Base58Check, aby poznać szczegóły.
Dlaczego dane wejściowe są ograniczone do ok. 20 KB?
Całe wejście to jedna duża liczba, więc nakład obliczeń rośnie z kwadratem jego długości. Base58 służy do zapisu kluczy, skrótów i adresów, a nie plików. Do dużych danych użyj Base64 lub Base85.