Zvolí sa Kódovať alebo Dekódovať, vyberie sa schéma a stlačí sa tlačidlo akcie. Všetko spracovanie zostáva v prehliadači.
Čo sú Base32 a Base58?
Sú to dve odpovede na jednu otázku: kanál, ktorý nesie text, má niesť bajty. Base32 a Base58 nie sú šifrovanie a nie sú hašovanie — nič neskrývajú a nič neskracujú. Prepíšu bajtový reťazec pomocou pevnej množiny čitateľných znakov a každý, kto pozná použitú množinu, to vie hneď vrátiť späť. Jediný dôvod uprednostniť jednu pred druhou je to, čo na druhom konci urobia so znakmi.
Dve rodiny toto prepisovanie robia úplne odlišne a tento rozdiel vysvetľuje takmer každé prekvapenie na tejto stránke:
- Balenie bitov — Base32, Base32 Hex, Crockford Base32, z-base-32. Bajty sa rozrežú na pevné skupiny a každých päť bitov sa stane jedným znakom. Dĺžka výstupu sa dá predvídať z dĺžky vstupu a posledná, čiastočne naplnená skupina je buď označená výplňovými znakmi, alebo zostane krátka.
- Prevod veľkého čísla — každá tabuľka Base58. Celý bajtový reťazec sa načíta ako jedno obrovské číslo v základe 256 a zapíše sa znova v základe 58. Nie sú tu žiadne skupiny ani výplň; dĺžka sa na nič nedelí a každý úvodný nulový bajt sa stane jedným úvodným nulovým symbolom.
Kam idú šesť nosných bitov: Base32 používa päť bitov na znak, takže potrebuje osem znakov na každých päť vstupných bajtov — približne o 60% väčšie. Base58 používa približne 5,86 bitu na znak, takže je blízko 37% väčšieho. Base64 zapĺňa šesť bitov na znak a je na 33%. Väčšie abecedy sú kratšie a ťažšie sa čítajú nahlas, čo je presne kompromis, ktorý každá z nich robí.
Sedem abecied na tejto stránke
Každá abeceda je vytlačená úplne, nie len opísaná, pretože dva nástroje, ktoré pod rovnakým názvom tlačia rôzne znaky, sa navzájom nezhodnú bez ohľadu na to, čo hovorí označenie. Riadky RFC 4648 sú normatívne; riadky Crockford a z-base-32 sledujú to, čo autor formátu zverejnil; tri riadky Base58 sú rozšírené konvencie, nie normy, preto sú uvedené oddelene.
Crockford Base32 a kontrolný znak modulo 37
Abeceda vynecháva I, L, O a U, aby sa žiadny symbol nedal prečítať ako iný. Zvyšok nerozlišuje veľkosť písmen pri vstupe: i a l sa čítajú ako číslica 1, o sa číta ako číslica 0 a pomlčky existujú len preto, aby sa dlhý reťazec čítal ľahšie. Formát k tomu definuje voliteľný kontrolný symbol, ktorým je hodnota reťazca symbolov čítaného ako číslo v základe 32, vzatá modulo 37, a zapísaná pomocou piatich ďalších symbolov pre hodnoty 32 až 36.
Kontrolný znak sa počíta nad reťazcom symbolov, nie nad bajtmi: pretože kodér dopĺňa posledný blok nulami, dekódovanie tých istých znakov vždy vedie k tej istej hodnote. Preto sa kontrolná hodnota v tabuľke dá zreprodukovať ručne iba zo zakódovaného stĺpca. Päť ďalších symbolov je *, ~, $, = a U pre hodnoty 32, 33, 34, 35 a 36, takže kontrolný symbol nie je vždy číslica alebo písmeno.
z-base-32
z-base-32 si zachováva päťbitové balenie RFC 4648 Base32 a mení len poradie tridsiatich dvoch znakov. Poradie je zvolené tak, aby znaky, ktoré si človek najpravdepodobnejšie bude musieť zapísať, boli najľahšie zapisovateľné a najťažšie zameniteľné. Nemá výplň, takže čitateľ musí vedieť, koľko symbolov sa má hodnota očakávať; to je cena formátu navrhnutého najprv na čítanie rukou.
Base58Check: jeden bajt verzie, užitočné zaťaženie, štyri bajty kontrolného súčtu
Samotný Base58 nemá spôsob, ako odlíšiť preklepnutý reťazec od správneho, pretože takmer každá kombinácia jeho päťdesiatich ôsmich znakov je platné číslo. Base58Check to rieši tým, že dáta uzavrie do obalu: jeden bajt verzie, potom užitočné zaťaženie, potom prvé štyri bajty SHA-256 aplikované dvakrát za sebou na prvé dve časti. Prijímajúci program tie štyri bajty prepočíta a reťazec odmietne, keď sa nezhodujú. Bajt verzie je to, čo peňaženke povie, či ide o platobnú adresu, adresu skriptu alebo súkromný kľúč.
Generátor pod prevodníkom zoberie bajt verzie a užitočné zaťaženie ako hexadecimálne čísla a zapíše reťazec Base58Check; overovač ho načíta späť, oddelí štyri bajty kontrolného súčtu, prepočíta ich a oznámi nájdený aj očakávaný. Zlý kontrolný súčet tu znamená, že reťazec bol preklepnutý alebo zmenený — nikdy nie že je zlé samotné užitočné zaťaženie, pretože to sa nikdy neinterpretuje.
Časté nedorozumenia
- "Base64 je šifrovanie." Nie. Nie je tu kľúč ani tajomstvo; výstup môže ktokoľvek vrátiť späť. Base32 a Base58 sú v rovnakom postavení a ani pretiahnutie hodnoty všetkými tromi nepridá ochranu.
- "Reťazec Base58 je adresa Bitcoin." Iba ak prejde aj kontrolným súčtom Base58Check a nesie bajt verzie, ktorý prijímajúci softvér rozpozná. Reťazce Base58 sa objavujú na mnohých ďalších miestach, vrátane obyčajných identifikátorov bez akéhokoľvek kontrolného súčtu.
- "Tri abecedy Base58 sú zameniteľné." Používajú tých istých päťdesiatosem znakov v troch rôznych poradiach, takže rovnaké bajty dajú tri rôzne reťazce. Nástroj musí dostať informáciu, ktorú použiť, a táto stránka vždy uvedie, ktorú použila.
- "Výplň je súčasťou hodnoty." Znaky
= označujú len poslednú skupinu. Dva reťazce Base32, ktoré sa líšia iba výplňou, opisujú tie isté bajty, preto dekodér prijme reťazec s odrezanou výplňou.
- "Funguje ľubovoľný znak." Každá abeceda je pevná množina. Znak mimo nej nemá hodnotu, takže dekodér sa zastaví a pomenuje znak aj jeho pozíciu namiesto hádania.
Otázky, ktoré vznikajú
Prečo Base32 používa 2-7 a nie 0-9? Lebo RFC 4648 zvolil abecedu tak, aby zostala vnútri znakov, ktoré môže obsahovať názov domény, a aby sa dala ľahko čítať nahlas. Base32 Hex používa namiesto toho 0-9 A-V, keď je dôležitejšie prirodzené triedenie.
Prečo reťazec Base58 tak často začína na 1? Každý úvodný nulový bajt vstupu sa stane jedným úvodným 1 (prvý znak abecied Bitcoin a Flickr). Bajt verzie 0x00 je jeden nulový bajt, takže väčšina adries mainnetu Bitcoin začína presne jedným 1.
Čo načíta tlačidlo Ukážka? Príklad patriaci k aktuálnej schéme a smeru na obrazovke, nikdy nie pevný text. Kodér dostane text vlastného príkladu schémy — vektory RFC 4648 oddiel 10 pre Base32 a Base32 Hex, 12345 z Crockfordovej špecifikácie, riadky z-base-32 vytlačené vyššie — a dekodér dostane zakódovaný reťazec pre zvolenú abecedu, čo robí ukážku použiteľnou v oboch smeroch. Tri riadky Base58 nesú úmyselne ten istý text, takže po prepnutí schémy a opätovnom stlačení Ukážky sa zobrazia tri poradia tých istých päťdesiatich ôsmich znakov vedľa seba. Ak je zapnutý kontrolný symbol Crockford, dekodér dostane hodnotu s koncovým symbolom, a to je jediný spôsob, ako vidieť, že overovač ho prijme.
Posiela táto stránka údaje niekam? Nie. Každý prevod sa vykonáva v tejto karte prehliadača a stránka neobsahuje žiadne sieťové volania. Preto funguje aj so súborom otvoreným priamo z disku.
Ktorú z nich použiť pre tajomstvo? Tajomstvá autentifikátorov TOTP a HOTP sú zvyčajne Base32 v abecede RFC 4648, pretože tajomstvo sa musí zadať ručne. Použije sa tá, ktorú vyžaduje prijímajúci softvér, a nikdy sa nespolieha na samotné kódovanie kvôli tajnosti.