Jak używać
- Wybierz „Koduj”, aby zamienić tekst lub bajty na Base58, albo „Dekoduj”, aby odtworzyć dane z ciągu Base58.
- Wybierz alfabet w opcji „Alfabet”. Domyślnie ustawiony jest Bitcoin, którego używają również IPFS i Solana.
- Wpisz lub wklej dane wejściowe. Jeśli masz surowe bajty, np. skrót lub klucz publiczny, ustaw „Wejście jako” na „Hex”.
- 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
| Alfabet | Znaki w kolejności |
|---|---|
| Bitcoin | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz |
| Flickr | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ |
| Ripple | rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz |
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
| Alfabet | 1-9 A-Z a-z bez 0 O I l |
|---|---|
| Rozmiar wyniku | Ok. 137% (arytmetyka dużych liczb) |
| Dopełnienie | Brak (wiodące bajty zerowe zamieniają się w 1) |
| Standard | Bitcoin Base58 |
| Rozróżnia wielkość liter | Tak |
Przykłady
| Wejście (UTF-8) | Wyjście |
|---|---|
Hello, World! | 72k1xXWG59fYdzSNoA |
Base64.is | r1Nm3AS7ZcnN |
你好 | 2xuZUfBKa |
Najczęściej zadawane pytania
Dlaczego wiodące bajty zerowe zamieniają się w 1?
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.