Koder i dekoder Base58Check

Dołącz 4-bajtową sumę kontrolną z podwójnego SHA-256 i zakoduj dane w Base58 albo zdekoduj ciąg Base58Check, zweryfikuj jego sumę kontrolną i odczytaj bajt wersji oraz ładunek.

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

Jak używać

  1. Wybierz „Koduj”, aby utworzyć ciąg Base58Check, lub „Dekoduj”, aby go zweryfikować i odzyskać bajty.
  2. Aby kodować, ustaw „Wejście jako” na „Hex” i wprowadź bajt wersji, a po nim ładunek, np. 00 i 20-bajtowy HASH160.
  3. Pozostaw włączoną opcję „Suma kontrolna Base58Check”. Suma kontrolna jest dołączana przy kodowaniu i weryfikowana przy dekodowaniu.
  4. Aby dekodować, wklej ciąg i ustaw „Wyjście jako” na „Hex”. Otrzymasz bajt wersji i ładunek bez sumy kontrolnej.

Jak działa Base58Check

  1. Na początku znajduje się bajt wersji, który określa rodzaj danych, a po nim ładunek, np. 20-bajtowy skrót klucza publicznego.
  2. Z tych bajtów oblicza się skrót SHA-256, z wyniku ponownie skrót SHA-256, a pierwsze 4 bajty stanowią sumę kontrolną.
  3. Suma kontrolna zostaje dołączona na końcu, a całość jest kodowana w Base58. Każdy wiodący bajt 0x00 zamienia się w 1.

To narzędzie oblicza sumę kontrolną dokładnie z wprowadzonych bajtów. Nie dodaje bajtu wersji automatycznie, więc umieść go na początku danych wejściowych. Przy dekodowaniu ponownie oblicza sumę kontrolną ze wszystkich bajtów oprócz ostatnich 4. Jeśli sumy się zgadzają, otrzymasz bajt wersji i ładunek, a jeśli nie, pojawi się błąd sumy kontrolnej. Przypadkowa literówka przechodzi niezauważona średnio tylko raz na około cztery miliardy prób.

Najczęstsze bajty wersji

Bajt wersjiDanePoczątek zakodowanego ciągu
0x00Adres Bitcoin P2PKH (20-bajtowy HASH160)1
0x05Adres Bitcoin P2SH (20-bajtowy skrót skryptu)3
0x6FAdres P2PKH w sieci testowej Bitcoinm lub n
0x80Klucz prywatny WIF (32 bajty plus 0x01 dla klucza skompresowanego)5 albo K / L dla klucza skompresowanego

Adresy SegWit i Taproot zaczynające się od bc1 korzystają z Bech32, a nie z Base58Check, i nie można ich tutaj zdekodować. Adresy XRP Ledger używają tej samej sumy kontrolnej z alfabetem Ripple: wybierz Ripple w opcji „Alfabet”.

Przykład: od HASH160 do adresu

Znany adres powiązany z blokiem genezy Bitcoina to bajt wersji 00, po którym następuje 20-bajtowy HASH160. Po wprowadzeniu tych bajtów z opcją „Wejście jako” ustawioną na „Hex” i włączoną opcją „Suma kontrolna Base58Check” otrzymuje się dobrze znany adres:

Wejście (Hex)  00 62e907b15cbf27d5425399ebf6f0fb50ebb88f18
Wyjście        1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

W kodzie pakiet base58 dla Pythona udostępnia funkcje b58encode_check() i b58decode_check(), a pakiet npm bs58check oferuje encode() i decode().

Specyfikacja

Alfabet1-9 A-Z a-z bez 0 O I l
Rozmiar wynikuOk. 137% plus 4-bajtowa suma kontrolna
DopełnienieBrak
StandardBitcoin Base58Check
Rozróżnia wielkość literTak

Przykłady

Wejście (UTF-8)Wyjście
Hello, World!gTazoqFvnegwaKM8v1B33sR
Base64.is6XgW4KVJr8DBmZEAeJ
你好DrMzxHL43oWHbW

Najczęściej zadawane pytania

Dlaczego dekodowanie kończy się błędem sumy kontrolnej?
Albo jeden ze znaków został źle przepisany, albo wybrano niewłaściwy alfabet, albo ciąg to zwykły Base58 bez sumy kontrolnej. Zwykłe ciągi Base58, takie jak adresy Solana i identyfikatory CID w IPFS, należy dekodować na stronie Base58.
Czy narzędzie samo dodaje bajt wersji?
Nie. Suma kontrolna jest obliczana z wprowadzonych bajtów, więc bajt wersji musi być częścią danych wejściowych. Ustaw „Wejście jako” na „Hex” i wpisz go jako pierwszy, np. 00 dla adresu Bitcoin.
Czy można zdekodować klucz prywatny WIF?
Tak. Wklej go na karcie „Dekoduj” i ustaw „Wyjście jako” na „Hex”. Otrzymasz 80, 32-bajtowy klucz oraz, w przypadku kluczy skompresowanych, końcowe 01. Dekodowanie odbywa się lokalnie w przeglądarce, ale mimo to z prawdziwymi kluczami prywatnymi obchodź się ostrożnie.
Czy można dekodować adresy bc1?

Nie. Natywne adresy SegWit i Taproot używają Bech32 lub Bech32m, czyli innego kodowania z własną sumą kontrolną. W Bitcoinie Base58Check stosuje się tylko w starszych adresach zaczynających się od 1 lub 3 (m, n lub 2 w sieci testowej).