Konwerter Hex na Base58

Wklej bajty szesnastkowe, aby otrzymać ciąg Base58 używany przez Bitcoin, Solanę i IPFS. Każdy wiodący bajt 00 staje się wiodącą jedynką, a wszystkie pozostałe bajty są zachowywane dokładnie.

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

Jak używać

  1. Wklej bajty hex w polu „Wejście”. Akceptowane są spacje, dwukropki i prefiks 0x.
  2. Odczytaj wynik Base58 w polu „Wyjście”.
  3. Skopiuj go przyciskiem „Kopiuj” lub kliknij „Zamień wejście z wyjściem”, aby zdekodować Base58 z powrotem do hex.

Jak hex zamienia się w Base58

Cyfry szesnastkowe są najpierw zamieniane na bajty, po dwie cyfry na bajt, dlatego dane wejściowe muszą mieć parzystą liczbę cyfr. Następnie bajty są odczytywane jako jedna liczba w kolejności big-endian i zapisywane ponownie w systemie o podstawie 58 z alfabetem Bitcoin. Każdy wiodący bajt 00 jest zapisywany jako 1, dlatego 0000ff zmienia się w 115Q, a samo ff w 5Q.

Base58 potrzebuje ok. 1,37 znaku na bajt, więc 64 cyfry hex (32 bajty) skracają się do 43 lub 44 znaków. Alfabet nie zawiera 0, O, I, l, + ani /, więc wynik łatwo przeczytać na głos, można go zaznaczyć podwójnym kliknięciem i zmieści się w adresie URL. Wszystkie obliczenia odbywają się w przeglądarce.

Tworzenie identyfikatorów Solana i IPFS

  • Solana: adres to 32-bajtowy klucz publiczny Ed25519 zapisany w Base58, bez prefiksu i bez sumy kontrolnej. Wklej 64-cyfrowy klucz hex, aby otrzymać adres.
  • IPFS CIDv0: CIDv0 to multihash sha2-256 zapisany w Base58. Dodaj 1220 przed 64-cyfrowym skrótem, a otrzymasz 46-znakowy ciąg zaczynający się od Qm. Musi to być skrót obliczony przez IPFS dla zakodowanego bloku, który nie jest tym samym co SHA-256 oryginalnego pliku.
1220 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG

Adresy Bitcoin wymagają sumy kontrolnej

Sam hash160 nie jest adresem. Starszy adres Bitcoin to zapis Base58Check bajtu wersji 00 i następującego po nim 20-bajtowego hash160, przy czym Base58Check przed kodowaniem dołącza 4-bajtową sumę kontrolną z podwójnego SHA-256. Zakodowanie 00 i hash160 zwykłym Base58 daje krótszy ciąg bez sumy kontrolnej, który portfele odrzucają.

Zamiast tego użyj strony Base58Check: ustaw „Wejście jako” na „Hex”, wpisz 00, a po nim hash160, a suma kontrolna zostanie dodana automatycznie. Jeśli dane hex kończą się już prawidłową sumą kontrolną, ta strona wygeneruje ten sam adres.

0062e907b15cbf27d5425399ebf6f0fb50ebb88f18    (Base58Check)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

Hex na Base58 w kodzie

# Python (pip install base58)
import base58
base58.b58encode(bytes.fromhex('0000ff'))     # b'115Q'

// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(Buffer.from('0000ff', 'hex'));    // '115Q'

Najczęściej zadawane pytania

Jak zamienić hash160 na adres Bitcoin?
Dodaj przed nim bajt wersji 00 i zakoduj całość w Base58Check, a nie w zwykłym Base58. Strona Base58Check robi to, gdy wprowadzisz bajty w postaci hex.
Dlaczego wynik zaczyna się od kilku znaków 1?

Dane hex zaczynają się od takiej samej liczby bajtów 00. Base58 zachowuje je jako wiodące jedynki, aby można je było odtworzyć podczas dekodowania ciągu.

Dlaczego dane hex są odrzucane?

Hex wymaga parzystej liczby cyfr i dopuszcza tylko znaki 0-9 oraz a-f, wielkimi lub małymi literami. Spacje, dwukropki i prefiks 0x są usuwane automatycznie; wszystko inne, np. przypadkowa litera g lub brakująca cyfra, powoduje błąd.

Którego alfabetu Base58 używa ta strona?
Alfabetu Bitcoin, którego używają też Solana, IPFS i większość innych projektów. Aby użyć alfabetu Flickr lub Ripple, przejdź na stronę Base58, wybierz tam alfabet i wprowadź dane jako bajty hex.