Konwerter Base58 na Hex

Wklej ciąg Base58, np. adres Bitcoin, klucz publiczny Solana lub skrót IPFS, aby otrzymać jego surowe bajty w zapisie szesnastkowym. Każda wiodąca jedynka staje się bajtem 00.

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

Jak używać

  1. Wklej ciąg Base58 w polu „Wejście”. Spacje i podziały wierszy są ignorowane.
  2. Odczytaj zdekodowane bajty w zapisie szesnastkowym w polu „Wyjście”.
  3. Skopiuj wynik przyciskiem „Kopiuj” lub kliknij „Zamień wejście z wyjściem”, aby zamienić hex z powrotem na Base58.

Jak Base58 zamienia się w hex

Base58 odczytuje cały ciąg jako jedną dużą liczbę zapisaną 58-znakowym alfabetem Bitcoin, który pomija 0, O, I i l. Konwersja na hex zapisuje tę samą liczbę w systemie szesnastkowym, po dwie cyfry na bajt, więc nic nie zostaje dodane ani utracone.

Bajty zerowe na początku danych nie mają wartości liczbowej, dlatego Base58 zapisuje każdy z nich jako wiodącą 1, czyli pierwszy znak swojego alfabetu. Dekoder zamienia każdą wiodącą 1 z powrotem na bajt 00. Na przykład 115Q dekoduje się do 0000ff, a adres System Program w sieci Solana, czyli trzydzieści dwa znaki 1 z rzędu, dekoduje się do 32 bajtów zerowych. Konwersja odbywa się lokalnie w przeglądarce.

Przykłady: Bitcoin, Solana i IPFS

W poniższym zapisie hex dodano spacje, aby pokazać poszczególne części:

Adres Bitcoin (P2PKH, blok genezy)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 c29b7d93
wersja | hash160 (20 bajtów) | suma kontrolna (4 bajty)

Klucz publiczny Solana (program SPL Token)
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9
32 bajty, bez bajtu wersji, bez sumy kontrolnej

IPFS CIDv0
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG
12 20 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
sha2-256 | długość 32 | skrót

Starsze adresy Bitcoin zaczynają się od 1, ponieważ ich bajt wersji to 00. Adresy P2SH zaczynają się od 3 i dekodują się do wersji 05.

Sumy kontrolne Base58Check zostają w bajtach

Adresy Bitcoin i klucze prywatne WIF używają Base58Check: przed kodowaniem dołącza się cztery bajty sumy kontrolnej, pobrane z podwójnego skrótu SHA-256 danych. Ta strona używa zwykłego Base58, więc suma kontrolna jest dekodowana jak wszystkie inne dane i pojawia się jako ostatnie 8 cyfr hex. Hash160 starszego adresu to 40 cyfr hex między wiodącym 00 a sumą kontrolną.

Aby potwierdzić, że adres nie jest uszkodzony, i otrzymać dane bez sumy kontrolnej, zdekoduj go na stronie Base58Check. Klucze Solana i skróty IPFS nie mają sumy kontrolnej, więc w ich przypadku właściwym wyborem jest zwykły Base58.

Base58 na hex w kodzie

# Python (pip install base58)
import base58
base58.b58decode('115Q').hex()      # '0000ff'

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

Najczęściej zadawane pytania

Dlaczego adres Bitcoin dekoduje się do 25 bajtów, a nie do 20?

Starszy adres zawiera 1-bajtową wersję, 20-bajtowy hash160 klucza publicznego i 4-bajtową sumę kontrolną. Zwykły Base58 zwraca wszystkie trzy części, więc wynik ma 50 cyfr hex. Hash160 to wszystko między pierwszym bajtem a czterema ostatnimi.

Dlaczego każda wiodąca jedynka zamienia się w 00?

W Base58 znak 1 oznacza wartość zero. Wiodące bajty zerowe zniknęłyby, gdyby dane traktować jak zwykłą liczbę, dlatego każdy z nich zapisuje się jako 1 i dekoduje z powrotem do bajtu 00.

Dlaczego pojawia się błąd nieprawidłowego znaku?
Alfabet Bitcoin nie zawiera znaków 0, O, I ani l, więc ciąg, w którym występują, nie jest Base58. Adresy Bitcoin zaczynające się od bc1 używają Bech32, czyli innego kodowania. Adresy Ripple (XRP) mają własny alfabet Base58; zdekoduj je na stronie Base58 po wybraniu alfabetu Ripple.
Jak długi jest klucz publiczny Solana?

Ma dokładnie 32 bajty, czyli 64 cyfry hex. W Base58 to zwykle 43 lub 44 znaki. Klucze zaczynające się od bajtów zerowych mogą być krótsze, co widać na przykładzie adresu System Program.