Base58 encoder en decoder

Stap 1 / 333%

Invoer


            

Base58 is een codering van binaire gegevens naar tekst die enkele gemakkelijk te verwarren tekens vermijdt. Het Bitcoin-alfabet laat 0 O I l en + / weg; andere systemen zetten dezelfde 58 symbolen in een andere volgorde. Oudere Bitcoin-adressen met Base58Check en IPFS CIDv0-tekenreeksen zijn bekende voorbeelden. Deze tool werkt alleen in de browser, zet UTF-8-tekst of exacte hexadecimale bytes om met het Bitcoin-, Ripple- of Flickr-alfabet en weigert tekens buiten het gekozen alfabet.

Base58 encoderen en decoderen

  1. 1

    Voer bytes of een Base58-string in

    De coderingsrichting accepteert hexadecimaal of ruwe tekst; de decoderingsrichting accepteert Base58.

  2. 2

    Kies het alfabet indien nodig

    Standaard is Bitcoin's Base58; Ripple- en Flickr-varianten zijn beschikbaar voor compatibiliteit.

  3. 3

    Voer de conversie uit

    Base58 deelt niet netjes op in 5- of 6-bitgroepen; het wordt behandeld als één enkel big-endian geheel getal, herhaaldelijk gedeeld door 58.

  4. 4

    Kopieer het resultaat

    Gecodeerde strings behouden leidende nulbytes als leidende `1`-tekens (het teken voor nul in Bitcoin's alfabet).

Het Bitcoin Base58-alfabet

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Let op wat ontbreekt: 0, O, I, l. Het eerste teken in het alfabet is 1, dat het integer 0 vertegenwoordigt.

Hoe het echt werkt

Anders dan Base64, dat bits in vaste groepen opdeelt, behandelt Base58 de hele byte-string als één enkel big-endian geheel getal N en schrijft die in basis 58:

result = []
while N > 0:
    result.prepend(alphabet[N mod 58])
    N = N / 58
for each leading zero byte in input:
    result.prepend(alphabet[0])  # i.e. '1'

Daarom is Base58-codering niet eenvoudig te streamen, je hebt het hele getal nodig voordat je een teken kunt uitgeven.

Base58 versus Base58Check

De gebruikelijke Base58Check-payload van een ouder P2PKH-adres telt 25 bytes: 1 versiebyte, 20 hashbytes en 4 controlesombytes. De controlesom bestaat uit de eerste 4 bytes van de dubbele SHA-256-digest van versie en hash. Base58-codering van die volledige payload levert de bekende adresreeks op.

Deze tool zet alleen gewone Base58 om. Gebruik een speciale Base58Check-validator om de versie en controlesom van een adres te controleren.

Alfabetvarianten

Variant Waar gebruikt Verschillen vs Bitcoin
Bitcoin BTC-adressen, IPFS CIDv0 Basis
Ripple XRP-adressen Verwisselde posities
Flickr Korte foto-URL’s Kleine letters vóór hoofdletters

Waarom niet gewoon Base64 gebruiken?

Base64 heeft geen lengtevariatie tussen binaire en gecodeerde tekst (4 tekens per 3 bytes), wat efficiënt is. Base58 heeft iets variabele overhead maar geen dubbelzinnige tekens, precies wat je wilt wanneer iemand een adres met de hand moet kopiëren of via de telefoon moet voorlezen.

Veelgestelde vragen

Niet universeel. Base58 is beter wanneer mensen de string verwerken; Base64 is beter wanneer machines hem rondsturen. Base64 encodeert 6 bits per teken tegenover Base58’s ~5.86, dus Base64 is iets compacter.

Base58 encodeert een groot integer, dus de lengte varieert een of twee tekens afhankelijk van de high-order bits. Typische P2PKH-adressen zijn 34 tekens, maar 33 is mogelijk.

De tool kan de tekenreeks naar ruwe bytes decoderen. Kies hexadecimale uitvoer om willekeurige bytes zonder verlies weer te geven. Versie en controlesom worden niet gecontroleerd, dus een geslaagde decodering bewijst niet dat het adres geldig is. Gebruik daarvoor een Base58Check-validator.

Ja. Elke nulbyte aan het begin van de invoer wordt een 1-teken in de uitvoer, en zo werken Bitcoin-adressen die met 1 beginnen.

Gerelateerde tools