Encoder en decoder met aangepast alfabet

Typ je eigen alfabet of begin met een voorinstelling, en codeer of decodeer daarmee. Kies Groot getal voor elke alfabetlengte, of Bitgroepen voor uitvoer in RFC 4648-stijl.

Werkt volledig in je browser. Er wordt niets geüpload.

Zo gebruik je het

  1. Typ je alfabet, of kies een Voorinstelling en pas die aan. Elk teken mag maar één keer voorkomen.
  2. Kies de Methode: Groot getal voor elke alfabetlengte, of Bitgroepen voor alfabetten van 2, 4, 8, 16, 32 of 64 tekens.
  3. Voer bij Bitgroepen desgewenst een Opvulteken in dat geen deel uitmaakt van het alfabet.
  4. Codeer je tekst, of plak een string die in jouw alfabet is geschreven om hem te decoderen.

Twee manieren om bytes aan tekens te koppelen

Groot getal werkt zoals Base58. De hele invoer wordt gelezen als één groot geheel getal en steeds opnieuw gedeeld door de lengte van het alfabet; elke rest bepaalt een teken. Dit werkt voor elk alfabet van minstens 2 tekens, zoals 10, 36, 58 of 62. Voorloopnulbytes worden geschreven als het eerste teken van het alfabet, zodat ze heen en terug behouden blijven. Er is geen opvulling, en de invoer is beperkt tot ongeveer 20 KB, omdat de berekening bij lange gegevens traag wordt.

Bitgroepen werken zoals RFC 4648. De invoer wordt in stukken van een vast aantal bits verdeeld: 1 bit bij een alfabet van 2 tekens, 4 bits bij 16, 5 bits bij 32 en 6 bits bij 64. Elk stuk is een index in het alfabet. Zo werken hex, Base32 en Base64 ook, en de uitvoerlengte hangt alleen af van de invoerlengte.

Waarom de twee methoden verschillende resultaten geven

De ene methode codeert de getalswaarde van de gegevens, de andere de bits, positie voor positie. De resultaten verschillen meestal, en een string moet worden gedecodeerd met de methode waarmee hij is gemaakt.

AlfabetInvoerBitgroepenGroot getal
Standaard-Base64HiSGk=Ehp
RFC 4648 Base32HiJBUQ====SDJ
01A010000011000001
0123456789Hiniet beschikbaar18537

Met bitgroepen en = als opvulling leveren de standaardalfabetten gewone Base64 en Base32 op. Groot getal laat de voorloopnulbit van A weg, omdat die methode een waarde schrijft en geen vast aantal bits. Met de tien cijfers als alfabet toont die methode de bytes van Hi gewoon als decimaal getal.

Het opvulteken geldt alleen voor bitgroepen. De uitvoer wordt opgevuld tot een veelvoud van 4 tekens bij alfabetten van 64 tekens en tot een veelvoud van 8 bij alfabetten van 32 en 8 tekens. Bij 2, 4 of 16 tekens vult elke byte precies hele tekens, dus dan is opvulling nooit nodig.

Regels voor een geldig alfabet

  • Minstens twee tekens.
  • Geen dubbele tekens. De decoder koppelt elk teken terug aan precies één waarde. Als a zowel voor 0 als voor 10 stond, zou een string met dat teken niet te decoderen zijn.
  • Hoofdletters tellen mee. a en A zijn verschillende tekens.
  • Het opvulteken mag niet in het alfabet staan, anders is het niet van de gegevens te onderscheiden.

Alles draait in je browser, dus je alfabet en je gegevens blijven op je apparaat.

Wanneer een aangepast alfabet handig is

  • Versluierde ID's. Een geschud alfabet maakt van ID's tokens zonder duidelijk patroon. Dat verbergt wel, maar beschermt niet: wie het alfabet kent, kan ze decoderen.
  • Eigen of verouderde formaten. Neem het alfabet van een systeem over uit de documentatie en decodeer de gegevens direct.
  • Leren. Vergelijk alfabetlengtes en beide methoden om te zien hoe het omrekenen tussen grondtallen werkt. Voor vaste alfabetten, zie Base58 en Base62.

Veelgestelde vragen

Wat is het verschil tussen groot getal en bitgroepen?

Groot getal zet de hele invoer als één geheel getal om naar het nieuwe grondtal, zoals Base58, en werkt met elke alfabetlengte. Bitgroepen verdelen de invoer in stukken bits van vaste grootte, zoals Base64, en vereisen een alfabet van 2, 4, 8, 16, 32 of 64 tekens.

Waarom komt de uitvoer van mijn eigen Base64-alfabet niet overeen met standaard-Base64?

Standaard-Base64 gebruikt bitgroepen. Kies de methode Bitgroepen en stel = in als opvulteken om dezelfde uitvoer te krijgen. De methode Groot getal maakt met hetzelfde alfabet een heel andere string.

Waarom zijn dubbele tekens niet toegestaan?

Elk teken moet naar precies één waarde decoderen. Een herhaald teken zou twee betekenissen hebben, en de oorspronkelijke gegevens zouden dan niet betrouwbaar te herstellen zijn.

Kan ik een opvulteken gebruiken met de methode Groot getal?

Nee. Uitvoer van Groot getal heeft geen vaste blokgrootte, dus er valt niets op te vullen. De optie voor opvulling geldt alleen voor bitgroepen.

Is een aangepast alfabet een vorm van versleuteling?

Nee. Het blijft een codering zonder sleutel. Een geschud alfabet kan gegevens op het eerste gezicht moeilijker herkenbaar maken, maar gebruik het nooit om geheimen te beschermen.