Převodník Base32 / Base58

Zakódujte text nebo dekódujte zakódované řetězce v sedmi schématech: Base32 podle RFC 4648 (A-Z2-7), base32hex (0-9A-V), Crockford Base32, z-base-32, Base58 Bitcoinu, Base58 Flickru a Base58 Ripple. Pod převodníkem je také samostatný generátor a ověřovač Base58Check (bajt verze + kontrolní součet dvojitého SHA-256). Text se zpracovává jako bajty UTF-8. Dále: Base64 | Ascii85 | Hex text.
Veškeré zpracování probíhá lokálně ve vašem prohlížeči — vaše data se nikdy nenahrávají na žádný server.
Jak to funguje: Každý znak se převede na bajty UTF-8 a potom každé schéma zabalí tyto bajty do své vlastní tisknutelné abecedy.
Schéma:
Jak to funguje: Zakódovaný řetězec se dekóduje zpět na bajty UTF-8 a zobrazí se jako text. Bílé znaky a koncová výplň = se ignorují; neplatné znaky se hlásí i s pozicí.
Schéma:
Ctrl+Enter ve vstupu spustí aktivní režim.
Zvolte Kódovat nebo Dekódovat, vyberte schéma a klikněte na tlačítko akce. Veškeré zpracování zůstává ve vašem prohlížeči.

Kodér Base58Check: Bajt verze (hex): Obsah (hex):
Ověřovač Base58Check: Adresa nebo řetězec:
Base58Check je formát adres Bitcoinu: jeden bajt verze, obsah a první čtyři bajty SHA-256 aplikované dvakrát na bajt verze a obsah dohromady. Kódovat znamená zapsat tento řetězec; Ověřit jej přečte zpět a při nesouhlasu kontrolního součtu uvede, který bajt je špatně.
O jednotlivých schématech:
Base32 (RFC 4648) — klasická abeceda necitlivá na velikost písmen A-Z 2-7; 8 bajtů se změní na 13 znaků plus výplň. Široce používaná pro tajné klíče HOTP/TOTP, DNSSEC a kontrolní součty souborů. Volitelná výplň = se přidává, pokud ji nevypnete.
Base32 Hex — rozšířená abeceda 0-9 A-V, která se přirozeně řadí podle abecedy a hodí se, když se zakódovaná hodnota používá i jako identifikátor podobný hexadecimálnímu.
Base58 (Bitcoin) — Base64 bez 0 O I l + /, takže výstup nikdy neobsahuje nejednoznačné znaky. Tato abeceda se používá pro adresy Bitcoinu. Úvodní nulové bajty se stanou číslicí 1.
Base58 (Flickr) — abeceda krátkých odkazů Flickru, citlivá na velikost písmen v opačném pořadí: číslice, malá písmena, pak velká.
Crockford Base32 — číslice a jednoznačná písmena 0-9 A-Z bez I, L, O a U. Dekódování přijímá také I a L jako 1, O jako 0, malá písmena a pomlčky jako ozdobu. Lze připojit volitelný kontrolní symbol modulo 37.
z-base-32 — stejné pětibitové skupiny jako RFC 4648 Base32 s abecedou přeskládanou tak, aby znaky, které lidé píší nejčastěji, byly nejsnáze napsatelné. Bez výplně a bez kontrolního symbolu.
Base58 (Ripple / XRP) — třetí pořadí týchž 58 znaků, používané v XRP Ledgeru. Jeho první znak je r, proto adresy Ripple začínají tímto písmenem.
Base58Check — řetězec Base58, jehož obsah nese čtyři bajty kontrolního součtu, takže přepsanou adresu lze odmítnout, místo aby tiše poslala prostředky jinam. Pod převodníkem je samostatný generátor a ověřovač.
Co jsou Base32 a Base58?

Jsou to dvě odpovědi na jednu otázku: kanál, který přenáší text, má přenášet bajty. Base32 a Base58 nejsou šifrování ani hašování — nic neskrývají a nic nezkracují. Přepisují řetězec bajtů pomocí pevné množiny čitelných znaků a kdo ví, která množina byla použita, převede to hned zpět. Jediný důvod dát přednost jedné před druhou je to, co s těmi znaky dělá přijímající strana.

Dvě rodiny přepisují data zcela odlišnými způsoby a rozdíl vysvětluje téměř každé překvapení na této stránce:

  • Skládání bitů — Base32, Base32 Hex, Crockford Base32, z-base-32. Bajty se nařežou do pevných skupin a každých pět bitů se stane jedním znakem. Délku výstupu lze předvídat z délky vstupu a poslední, částečně zaplněná skupina je buď označena výplňovými znaky, nebo zůstane krátká.
  • Převod velkého čísla — každá tabulka Base58. Celý řetězec bajtů se přečte jako jedno obrovské číslo o základu 256 a znovu se zapíše o základu 58. Nejsou zde žádné skupiny ani výplň; délka se do ničeho nedělí a každý úvodní nulový bajt se stane jedním úvodním nulovým symbolem.
Kam jdou šest nosných bitů: Base32 spotřebuje pět bitů na znak, takže potřebuje osm znaků na každých pět vstupních bajtů — zhruba o 60% víc. Base58 spotřebuje asi 5,86 bitu na znak, takže vychází zhruba o 37% víc. Base64 má šest bitů na znak a vychází na 33%. Větší abecedy jsou kratší a hůř se čtou nahlas, a přesně to je kompromis, který každá z nich dělá.
Sedm abeced na této stránce

Každá abeceda je vytištěna celá, místo aby byla popsána, protože dva nástroje, které pod týmž názvem tisknou různé znaky, se spolu nebudou shodovat, ať je popisek jakýkoli. Řádky RFC 4648 jsou normativní; řádky Crockford a z-base-32 se řídí tím, co zveřejnil autor formátu; tři řádky Base58 jsou rozšířené konvence, nikoli normy, proto jsou uvedeny zvlášť.

Crockford Base32 a kontrolní symbol modulo 37

Abeceda vynechává I, L, O a U, aby žádný symbol nemohl být přečten jako jiný. Co zůstane, je při vstupu necitlivé na velikost písmen: i a l se čtou jako číslice 1, o jako číslice 0 a pomlčky slouží jen k lepší čitelnosti dlouhého řetězce. Formát navíc definuje volitelný kontrolní symbol, což je hodnota řetězce symbolů čtená jako číslo o základu 32, vzatá modulo 37 a zapsaná pomocí pěti dodatečných symbolů pro hodnoty 32 až 36.

Kontrolní symbol se počítá nad řetězcem symbolů, ne nad bajty: protože kodér doplňuje poslední skupinu nulami, dekódování týchž znaků se vždy vrátí ke stejné hodnotě. Proto lze kontrolní hodnotu z tabulky zreprodukovat ručně jen ze zakódovaného sloupce. Těch pět dodatečných symbolů je *, ~, $, = a U pro hodnoty 32, 33, 34, 35 a 36, takže kontrolní symbol není vždy číslice nebo písmeno.

z-base-32

z-base-32 si zachovává pětibitové skládání z RFC 4648 Base32 a mění jen pořadí třiceti dvou znaků. Pořadí je zvoleno tak, aby znaky, které člověk nejspíš bude muset napsat, byly nejsnáze napsatelné a nejhůře zaměnitelné. Nemá výplň, takže čtenář musí vědět, kolik symbolů má hodnota mít; to je cena formátu navrženého především pro ruční čtení.

Base58Check: jeden bajt verze, obsah, čtyři bajty kontrolního součtu

Samotný Base58 nemá způsob, jak odlišit přepsaný řetězec od správného, protože téměř každá kombinace jeho padesáti osmi znaků je platné číslo. Base58Check to řeší tím, že data uzavře do obalu: jeden bajt verze, pak obsah a pak prvních čtyři bajty SHA-256 aplikované dvakrát za sebou na první dvě části. Přijímající program tyto čtyři bajty přepočítá a řetězec odmítne, když se neshodují. Bajt verze je to, co peněžence řekne, zda jde o platební adresu, adresu skriptu nebo soukromý klíč.

Generátor pod převodníkem bere bajt verze a obsah jako hexadecimální čísla a zapíše řetězec Base58Check; ověřovač jej přečte zpět, oddělí čtyři bajty kontrolního součtu, přepočítá je a oznámí jak ten nalezený, tak ten očekávaný. Špatný kontrolní součet zde znamená, že řetězec byl přepsán nebo pozměněn — nikdy neznamená, že je špatný samotný obsah, protože obsah se nikdy neinterpretuje.

Časté nedorozumění
  • "Base64 je šifrování." Ne. Neexistuje klíč ani tajemství; výstup může zvrátit kdokoli. Base32 a Base58 jsou na tom stejně a protažení hodnoty všemi třemi také nepřidá ochranu.
  • "Řetězec Base58 je adresa Bitcoinu." Jen tehdy, když prochází také kontrolou Base58Check a nese bajt verze, který přijímající software zná. Řetězce Base58 se objevují na mnoha jiných místech, včetně prostých identifikátorů bez jakéhokoli kontrolního součtu.
  • "Tři abecedy Base58 jsou zaměnitelné." Používají týchž padesát osm znaků ve třech různých pořadích, takže tytéž bajty dají tři různé řetězce. Nástroj musí dostat pokyn, kterou použít, a tato stránka vždy říká, kterou použila.
  • "Výplň je součástí hodnoty." Znaky = označují jen poslední skupinu. Dva řetězce Base32, které se liší jen výplní, popisují tytéž bajty, a proto dekodér přijme řetězec, z něhož je výplň odříznuta.
  • "Fungují libovolné znaky." Každá abeceda je pevná množina. Znak zvenku nemá hodnotu, takže dekodér se zastaví a pojmenuje znak i jeho pozici, místo aby hádal.
Otázky, které se objevují

Proč Base32 používá 2-7, a ne 0-9? Protože RFC 4648 zvolil abecedu tak, aby zůstala uvnitř znaků, které smí obsahovat doménové jméno, a aby se dobře četla nahlas. Base32 Hex místo toho používá 0-9 A-V, pokud je důležitější přirozené řazení.

Proč řetězec Base58 tak často začíná na 1? Každý úvodní nulový bajt vstupu se stane jedním úvodním 1 (prvním znakem abeced Bitcoinu a Flickru). Bajt verze 0x00 je jeden nulový bajt, takže většina adres mainnetu Bitcoinu začíná právě jedním 1.

Co načte tlačítko Ukázka? Příklad, který patří k právě zobrazenému schématu a směru, nikdy pevný text. Kodér dostane text vlastního příkladu schématu — vektory RFC 4648 oddíl 10 pro Base32 a Base32 Hex, Crockfordovo 12345, řádky z-base-32 vytištěné výše — a dekodér dostane zakódovaný řetězec pro zvolenou abecedu, což ukázku činí použitelnou v obou směrech. Tři řádky Base58 nesou záměrně tentýž text, takže přepnutí schématu a nové stisknutí Ukázky ukáže vedle sebe tři pořadí týchž padesáti osmi znaků. Při zaškrtnutém kontrolním symbolu Crockford dostane dekodér hodnotu s připojeným symbolem na konci, což je jediný způsob, jak sledovat, že ověřovač jeden přijme.

Posílá tato stránka mé údaje někam? Ne. Každý převod probíhá v této kartě prohlížeče a stránka neobsahuje žádné síťové volání. Proto funguje i s tím, že je soubor otevřen přímo z disku.

Kterou z nich použít pro tajný údaj? Tajné klíče autentizátorů TOTP a HOTP bývají v Base32 v abecedě RFC 4648, protože tajný klíč musí být přepsán ručně. Použijte tu, kterou váš přijímající software vyžaduje, a na samotné kódování se pro utajení nikdy nespoléhejte.