Base32- / Base58-converter

Codeer tekst of decodeer gecodeerde tekenreeksen in zeven schema's: RFC 4648 Base32 (A-Z2-7), base32hex (0-9A-V), Crockford Base32, z-base-32, Bitcoin Base58, Flickr Base58 en Ripple Base58. Er is ook een zelfstandige Base58Check-generator en -verifier (versiebyte + dubbele SHA-256-controlesom) onder de converter. Tekst wordt als UTF-8-bytes verwerkt. Ook: Base64 | Ascii85 | Hex-tekst.
Alle verwerking gebeurt lokaal in uw browser — uw gegevens worden nooit naar een server geüpload.
Hoe het werkt: Elk teken wordt omgezet in UTF-8-bytes, waarna elk schema die bytes in zijn eigen afdrukbare alfabet pakt.
Schema:
Hoe het werkt: De gecodeerde tekenreeks wordt teruggedecodeerd naar UTF-8-bytes en als tekst getoond. Witruimte en eindstandige =-opvulling worden genegeerd; ongeldige tekens worden gemeld met hun positie.
Schema:
Ctrl+Enter in de invoer voert de actieve modus uit.
Kies Coderen of Decoderen, kies een schema en klik op de actieknop. Alle verwerking blijft in uw browser.

Base58Check-encoder: Versiebyte (hex): Payload (hex):
Base58Check-verifier: Adres of tekenreeks:
Base58Check is het adresformaat van Bitcoin: één versiebyte, de payload, en daarna de eerste vier bytes van SHA-256, twee keer toegepast op de versiebyte en de payload samen. Coderen schrijft die tekenreeks; verifiëren leest er een in en meldt welke byte fout is wanneer de controlesom niet klopt.
Over elk schema:
Base32 (RFC 4648) — het klassieke hoofdletterongevoelige alfabet A-Z 2-7; 8 bytes worden 13 tekens plus opvulling. Veel gebruikt voor HOTP/TOTP-geheimen, DNSSEC en bestandscontrolesommen. Een optionele =-opvulling wordt toegevoegd, tenzij u die uitschakelt.
Base32 Hex — het uitgebreide alfabet 0-9 A-V dat op natuurlijke volgorde sorteert en handig is wanneer de gecodeerde waarde ook als hex-achtige identificatie wordt gebruikt.
Base58 (Bitcoin) — Base64 zonder 0 O I l + /, zodat de uitvoer nooit dubbelzinnige tekens bevat. Dit is het alfabet dat voor Bitcoin-adressen wordt gebruikt. Voorloopnulbytes worden het cijfer 1.
Base58 (Flickr) — het Flickr-alfabet voor korte URL's, dat hoofdlettergevoelig is in de omgekeerde volgorde: cijfers, kleine letters, daarna hoofdletters.
Crockford Base32 — de cijfers en de ondubbelzinnige letters 0-9 A-Z, met I, L, O en U weggelaten. Decoderen accepteert ook I en L als 1, O als 0, kleine letters, en streepjes als versiering. Een optioneel controleteken modulo 37 kan worden toegevoegd.
z-base-32 — dezelfde vijfbitsgroepen als RFC 4648 Base32, met het alfabet opnieuw geordend zodat de tekens die mensen het vaakst typen het makkelijkst te schrijven zijn. Geen opvulling en geen controleteken.
Base58 (Ripple / XRP) — een derde volgorde van dezelfde 58 tekens, gebruikt door de XRP Ledger. Het eerste teken is r, en daarom beginnen Ripple-adressen met die letter.
Base58Check — een Base58-tekenreeks waarvan de payload vier bytes controlesom draagt, zodat een verkeerd getypt adres kan worden geweigerd in plaats van geld stilletjes ergens anders naartoe te sturen. Onder de converter staan een zelfstandige generator en verifier.
Wat zijn Base32 en Base58?

Het zijn twee antwoorden op één vraag: een kanaal dat tekst draagt, moet bytes dragen. Base32 en Base58 zijn geen versleuteling en geen hashing — ze verbergen niets en ze verkorten niets. Ze herschrijven een bytereeks met een vaste set leesbare tekens, en wie weet welke set er is gebruikt, kan ze direct terugdraaien. De enige reden om de ene boven de andere te verkiezen, is wat het ontvangende eind met de tekens doet.

Twee families doen die herschrijving op totaal verschillende manieren, en het verschil verklaart bijna elke verrassing op deze pagina:

  • Bitpakking — Base32, Base32 Hex, Crockford Base32, z-base-32. De bytes worden in vaste groepen geknipt en elke vijf bits worden één teken. De uitvoerlengte is voorspelbaar uit de invoerlengte, en de laatste, deels gevulde groep wordt ofwel met opvultekens gemarkeerd ofwel kort gelaten.
  • Grootgetalconversie — elke Base58-tabel. De hele bytereeks wordt als één enorm getal in grondtal 256 gelezen en daarna in grondtal 58 weer opgeschreven. Er zijn geen groepen en geen opvulling; de lengte deelt op niets, en elke voorloopnulbyte wordt één voorloopnulsymbool.
Waar de zes databits naartoe gaan: Base32 gebruikt vijf bits per teken, dus het heeft acht tekens nodig voor elke vijf invoerbytes — ongeveer 60% groter. Base58 gebruikt ongeveer 5,86 bits per teken, dus het komt uit op ongeveer 37% groter. Base64 past zes bits per teken en komt uit op 33%. Grotere alfabetten zijn korter maar moeilijker hardop voor te lezen, en dat is precies de afweging die elk van hen maakt.
De zeven alfabetten op deze pagina

Elk alfabet wordt volledig afgedrukt in plaats van beschreven, omdat twee hulpmiddelen die verschillende tekens onder dezelfde naam afdrukken het nooit met elkaar eens zullen zijn, wat het label ook zegt. De RFC 4648-rijen zijn normatief; de Crockford- en z-base-32-rijen volgen wat de auteur van het formaat heeft gepubliceerd; de drie Base58-rijen zijn wijdverbreide conventies in plaats van standaarden, en daarom staan ze apart.

Crockford Base32 en het controleteken modulo 37

Het alfabet laat I, L, O en U weg, zodat geen enkel symbool als een ander kan worden gelezen. Wat overblijft is hoofdletterongevoelig bij invoer: i en l worden gelezen als het cijfer 1, o als het cijfer 0, en streepjes bestaan alleen om een lange tekenreeks leesbaarder te maken. Daarbovenop definieert het formaat een optioneel controleteken, dat de waarde van de symboolreeks is, gelezen als getal in grondtal 32, modulo 37, en geschreven met vijf extra symbolen voor de waarden 32 tot 36.

Het controleteken wordt berekend over de tekenreeks van symbolen, niet over de bytes: omdat de encoder de laatste groep met nullen opvult, keert het decoderen van dezelfde tekens altijd terug naar dezelfde waarde. Daarom kan de controlewaarde in de tabel met de hand worden nagerekend uit alleen de gecodeerde kolom. De vijf extra symbolen zijn *, ~, $, = en U voor de waarden 32, 33, 34, 35 en 36, dus een controleteken is niet altijd een cijfer of een letter.

z-base-32

z-base-32 behoudt de vijfbitsgroepering van RFC 4648 Base32 en wijzigt alleen de volgorde van de tweeëndertig tekens. De volgorde is zo gekozen dat de tekens die iemand het vaakst moet opschrijven de tekens zijn die het makkelijkst te schrijven zijn en het moeilijkst te verwarren. Er is geen opvulling, dus een lezer moet weten hoeveel symbolen een waarde zou moeten hebben; dat is de prijs van een formaat dat in de eerste plaats met de hand gelezen moet kunnen worden.

Base58Check: één versiebyte, de payload, vier bytes controlesom

Base58 alleen heeft geen manier om een verkeerd getypte tekenreeks van een juiste te onderscheiden, omdat bijna elke combinatie van zijn achtenvijftig tekens een geldig getal is. Base58Check lost dat op door de data in een omhulsel te zetten: één versiebyte, daarna de payload, en daarna de eerste vier bytes van SHA-256, twee keer achter elkaar toegepast op de eerste twee delen. Een ontvangend programma berekent die vier bytes opnieuw en weigert de tekenreeks wanneer ze verschillen. De versiebyte vertelt een wallet of het een betaaladres, een scriptadres of een privésleutel ziet.

De generator onder de converter neemt de versiebyte en de payload als hexadecimaal en schrijft de Base58Check-tekenreeks; de verifier leest er een in, splitst de vier controlesombytes af, berekent ze opnieuw en meldt zowel de gevonden als de verwachte. Een verkeerde controlesom betekent hier dat de tekenreeks verkeerd is getypt of gewijzigd — het betekent nooit dat de payload zelf verkeerd is, want de payload wordt nooit geïnterpreteerd.

Veelvoorkomende misverstanden
  • "Base64 is versleuteling." Nee. Er is geen sleutel en geen geheim; de uitvoer is door iedereen terug te draaien. Base32 en Base58 staan in dezelfde positie, en het door alle drie halen van een waarde voegt ook geen bescherming toe.
  • "Een Base58-tekenreeks is een Bitcoin-adres." Alleen als hij ook de Base58Check-controlesom doorstaat en een versiebyte draagt die de ontvangende software herkent. Base58-tekenreeksen komen op veel andere plekken voor, inclusief gewone identificaties zonder enige controlesom.
  • "De drie Base58-alfabetten zijn inwisselbaar." Ze gebruiken dezelfde achtenvijftig tekens in drie verschillende volgordes, zodat dezelfde bytes drie verschillende tekenreeksen opleveren. Een hulpmiddel moet weten welke u gebruikt, en deze pagina meldt altijd welke ze gebruikte.
  • "Opvulling is onderdeel van de waarde." De =-tekens markeren alleen de laatste groep. Twee Base32-tekenreeksen die alleen in hun opvulling verschillen, beschrijven dezelfde bytes, en daarom accepteert de decoder een tekenreeks waarvan de opvulling is afgeknipt.
  • "Elk teken werkt." Elk alfabet is een vaste set. Een teken van buiten de set heeft geen waarde, dus de decoder stopt en noemt het teken en de positie in plaats van te raden.
Vragen die vaak opkomen

Waarom gebruikt Base32 2-7 en niet 0-9? Omdat RFC 4648 het alfabet zo koos dat het binnen de tekens blijft die een domeinnaam mag bevatten, en zodat het makkelijk hardop te lezen is. Base32 Hex gebruikt in plaats daarvan 0-9 A-V wanneer natuurlijke sortering belangrijker is.

Waarom begint een Base58-tekenreeks zo vaak met 1? Elke voorloopnulbyte van de invoer wordt één voorloop-1 (het eerste teken van de Bitcoin- en Flickr-alfabetten). Een versiebyte 0x00 is één nulbyte, dus de meeste mainnet-Bitcoinadressen beginnen met precies één 1.

Wat laadt de knop Voorbeeld? Het voorbeeld dat bij het schema en de richting op het scherm hoort, nooit een vaste tekst. De encoder krijgt de tekst van het eigen voorbeeld van het schema — de RFC 4648-sectie 10-vectoren voor Base32 en Base32 Hex, Crockfords 12345, de z-base-32-rijen die hierboven zijn afgedrukt — en de decoder krijgt de gecodeerde tekenreeks voor het gekozen alfabet, wat het voorbeeld in beide richtingen bruikbaar maakt. De drie Base58-rijen dragen bewust dezelfde tekst, zodat het wisselen van schema en opnieuw drukken op Voorbeeld de drie volgordes van dezelfde achtenvijftig tekens naast elkaar laat zien. Met het aangevinkte Crockford-controleteken krijgt de decoder de waarde met het symbool aan het eind, en dat is de enige manier om te zien dat de verifier er een accepteert.

Stuurt deze pagina mijn gegevens ergens naartoe? Nee. Elke conversie gebeurt in dit browsertabblad, en de pagina bevat geen netwerkaanroepen van welke soort dan ook. Daarom werkt hij ook met het bestand direct vanaf schijf geopend.

Welke moet ik voor een geheim gebruiken? TOTP- en HOTP-authenticatorgeheimen zijn meestal Base32 in het RFC 4648-alfabet, omdat het geheim met de hand moet worden ingetypt. Gebruik de variant die uw ontvangende software vraagt, en vertrouw voor geheimhouding nooit op de codering zelf.