Koder i dekoder Base58

Krok 1 / 333%

Dane wejściowe


            

Base58 to kodowanie danych binarnych na tekst, zaprojektowane tak, aby unikać kilku łatwych do pomylenia znaków. Alfabet Bitcoin pomija 0 O I l oraz + /, a inne systemy ustawiają te same 58 symboli w innej kolejności. Znanymi przykładami są starsze adresy Bitcoin w Base58Check i ciągi IPFS CIDv0. To narzędzie działa wyłącznie w przeglądarce, konwertuje tekst UTF-8 lub dokładne bajty szesnastkowe z użyciem alfabetu Bitcoin, Ripple albo Flickr i odrzuca znaki spoza wybranego alfabetu.

Jak kodować i dekodować Base58

  1. 1

    Wpisz bajty albo ciąg Base58

    Kierunek kodowania przyjmuje hex albo surowy tekst; kierunek dekodowania przyjmuje Base58.

  2. 2

    W razie potrzeby wybierz alfabet

    Domyślnie używany jest Base58 Bitcoina; dla zgodności dostępne są warianty Ripple i Flickr.

  3. 3

    Uruchom konwersję

    Base58 nie dzieli danych na równe grupy 5- albo 6-bitowe; traktuje je jako jedną dużą liczbę big-endian, wielokrotnie dzieloną przez 58.

  4. 4

    Skopiuj wynik

    Zakodowane ciągi zachowują wiodące bajty zerowe jako wiodące znaki `1` (glif zera w alfabecie Bitcoin).

Alfabet Bitcoin Base58

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Zwróć uwagę, czego brakuje: 0, O, I, l. Pierwszy znak alfabetu to 1, który reprezentuje liczbę 0.

Jak to naprawdę działa

W przeciwieństwie do Base64, które dzieli bity na stałe grupy, Base58 traktuje cały ciąg bajtów jako jedną dużą liczbę big-endian N i zapisuje ją w podstawie 58:

result = []
while N > 0:
    result.prepend(alphabet[N mod 58])
    N = N / 58
for each leading zero byte in input:
    result.prepend(alphabet[0])  # i.e. '1'

Dlatego kodowanie Base58 jest nietrywialne do streamowania, potrzebujesz całej liczby, zanim możesz wyemitować jakikolwiek znak.

Base58 vs Base58Check

Typowy ładunek Base58Check starszego adresu P2PKH ma 25 bajtów: 1 bajt wersji, 20 bajtów skrótu i 4 bajty sumy kontrolnej. Suma to pierwsze 4 bajty podwójnego skrótu SHA-256 wersji i skrótu adresu. Zakodowanie całego ładunku w Base58 daje znany ciąg adresu.

To narzędzie konwertuje wyłącznie zwykły Base58. Do sprawdzenia wersji i sumy kontrolnej adresu użyj osobnego walidatora Base58Check.

Warianty alfabetu

Wariant Gdzie jest używany Różnice względem Bitcoin
Bitcoin Adresy BTC, IPFS CIDv0 Punkt odniesienia
Ripple Adresy XRP Zamienione pozycje
Flickr Krótkie URL-e zdjęć Małe litery przed wielkimi

Dlaczego nie użyć po prostu Base64?

Base64 ma niewielką zmianę długości między binariami a tekstem zakodowanym (4 znaki na 3 bajty), więc jest wydajne. Base58 ma lekko zmienny narzut, ale nie ma niejednoznacznych znaków, czego potrzebujesz, gdy ktoś musi przepisać adres ręcznie albo przeczytać go przez telefon.

Najczęściej zadawane pytania

Nie uniwersalnie. Base58 jest lepszy, gdy ciągiem operują ludzie; Base64 jest lepszy, gdy przenoszą go maszyny. Base64 koduje 6 bitów na znak wobec około 5.86 w Base58, więc Base64 jest trochę bardziej kompaktowy.

Base58 koduje dużą liczbę całkowitą, więc długość różni się o znak lub dwa zależnie od najbardziej znaczących bitów. Typowe adresy P2PKH mają 34 znaki, ale 33 są możliwe.

Narzędzie może zdekodować ciąg do surowych bajtów. Wybierz wyjście szesnastkowe, aby bezstratnie pokazać dowolne bajty. Nie sprawdza wersji ani sumy kontrolnej, więc udane dekodowanie nie dowodzi poprawności adresu. Do tego służy walidator Base58Check.

Tak. Każdy bajt zerowy na początku wejścia staje się znakiem 1 na wyjściu, tak działają adresy Bitcoin zaczynające się od 1.

Powiązane narzędzia