Base32hex-encoder en -decoder

Zet tekst, hex-bytes of bestanden om naar Base32 met het uitgebreide hexalfabet en terug. Bepaal zelf de opvulling en of je hoofd- of kleine letters wilt, bijvoorbeeld voor labels in NSEC3-stijl.

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

Zo gebruik je het

  1. Kies Coderen om tekst om te zetten naar Base32hex, of Decoderen om Base32hex terug te zetten naar tekst.
  2. Laat bij Variant Base32hex geselecteerd. Zet Opvulling uit of kies Kleine letters als je formaat dat vereist.
  3. Typ of plak je invoer, of open een bestand. Het resultaat wordt bijgewerkt terwijl je typt.
  4. Kopieer het resultaat of download het als bestand.

Wat is Base32hex?

Base32hex is de "Base 32 Encoding with Extended Hex Alphabet" uit sectie 7 van RFC 4648. Het werkt precies zoals de standaardvariant van Base32: elk teken draagt 5 bits, elke 5 bytes worden 8 tekens en de uitvoer wordt met = aangevuld tot een veelvoud van 8. Alleen het alfabet is anders. In plaats van A-Z 2-7 telt Base32hex verder waar hexadecimaal ophoudt: de cijfers 0 tot en met 9 staan voor 0 tot en met 9, A is 10 en V is 31.

Omdat de twee alfabetten de meeste tekens gemeen hebben, kan een standaard-Base32-decoder een Base32hex-string vaak zonder foutmelding verwerken, maar de bytes die eruit komen zijn dan verkeerd. Decodeer altijd met dezelfde variant als waarmee is gecodeerd.

De sorteervolgorde blijft behouden

Het alfabet staat in oplopende ASCII-volgorde en de waarde van elk teken neemt toe met zijn positie. Daardoor levert het teken voor teken vergelijken van twee Base32hex-strings dezelfde volgorde op als het vergelijken van de onderliggende bytes. RFC 4648 noemt dit als de eigenschap die standaard-Base32 en Base64 missen, en het maakt Base32hex geschikt voor sleutels in gesorteerde opslag, zoals databases en key-value stores.

Houd alle strings in één soort letters en zet de opvulling uit als de invoer verschillende lengtes heeft: het teken = wordt tussen de cijfers en de letters gesorteerd en kan de volgorde verstoren.

Base32hex in NSEC3-records van DNSSEC

NSEC3-records, gedefinieerd in RFC 5155, bewijzen dat een DNS-naam niet bestaat en maken het tegelijk moeilijker om alle namen in de zone op te sommen. Elke naam wordt gehasht met SHA-1, en de hash van 20 bytes wordt geschreven als een Base32hex-label van 32 tekens zonder opvulling, meestal weergegeven in kleine letters. Omdat de codering de volgorde van de hashes behoudt, vormen de gehashte namen een gesorteerde keten. Om een hash in zo'n label om te zetten, plak je hem als hexinvoer, zet je Opvulling uit en kies je Kleine letters. Deze tool voert alleen de coderingsstap uit; hij berekent niet de gezouten, herhaald toegepaste NSEC3-hash.

Base32hex in code

# Python 3.10+
import base64
base64.b32hexencode(b'foobar')          # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'

// Go (import "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)

Specificatie

Alfabet0-9 A-V
Uitvoergrootte8 tekens per 5 bytes (160%)
Opvulling= tot een veelvoud van 8 tekens
StandaardRFC 4648, sectie 7
HoofdlettergevoeligNee

Voorbeelden

Invoer (UTF-8)Uitvoer
Hello, World!91IMOR3F5GG5ERRIDHI22===
Base64.is89GN6P9M6GN6ISO=
你好SIUQ1PD5NK======

Veelgestelde vragen

Wat is het verschil tussen Base32 en Base32hex?
Beide gebruiken 5 bits per teken en dezelfde opvulregels. Standaard-Base32 gebruikt A-Z 2-7; Base32hex gebruikt 0-9 A-V, waardoor de sorteervolgorde van de gegevens behouden blijft. De twee zijn niet uitwisselbaar.
Is Base32hex hoofdlettergevoelig?

Het alfabet is gedefinieerd in hoofdletters, maar deze decoder accepteert ook invoer in kleine letters. Zet Kleine letters aan als je uitvoer in kleine letters nodig hebt, bijvoorbeeld voor DNS-labels.

Moet ik opvulling gebruiken?
RFC 4648 vult met = aan tot een veelvoud van 8 tekens, maar veel formaten, waaronder NSEC3, laten de opvulling weg. De decoder accepteert beide, dus kies wat het ontvangende systeem verwacht.
Is een Base32hex-string hetzelfde als hexadecimaal?
Nee. Een Base32hex-string die toevallig alleen 0-9 en A-F bevat, lijkt op hex, maar elk teken draagt 5 bits in plaats van 4. Werk je met gewone hex, gebruik dan de Base16-tool.