Kodare och avkodare för Base32hex

Konvertera text, hexbyte eller filer till Base32 med det utökade hexalfabetet och tillbaka. Styr utfyllnad och skiftläge, till exempel för att skapa etiketter i NSEC3-stil.

Körs helt i din webbläsare. Inget laddas upp.

Så använder du verktyget

  1. Välj Koda för att göra om text till Base32hex, eller Avkoda för att göra om Base32hex till text.
  2. Behåll varianten Base32hex. Stäng av utfyllnad eller byt till gemener om ditt format kräver det.
  3. Skriv eller klistra in indatan, eller öppna en fil. Resultatet uppdateras medan du skriver.
  4. Kopiera resultatet eller ladda ned det som en fil.

Vad är Base32hex?

Base32hex är "Base 32 Encoding with Extended Hex Alphabet", som definieras i avsnitt 7 i RFC 4648. Den fungerar precis som vanlig Base32: varje tecken bär 5 bitar, varje grupp om 5 byte blir 8 tecken och utdatan fylls ut med = till en multipel av 8. Det enda som skiljer är alfabetet. I stället för A-Z 2-7 fortsätter Base32hex att räkna där det hexadecimala systemet slutar: siffrorna 0 till 9 står för 0 till 9, A är 10 och V är 31.

Eftersom de två alfabeten har de flesta tecknen gemensamma kan en Base32hex-sträng ofta matas in i en vanlig Base32-avkodare utan att något fel uppstår, men bytena som kommer ut blir fel. Avkoda alltid med samma variant som användes vid kodningen.

Sorteringsordningen bevaras

Alfabetet står i stigande ASCII-ordning, och varje teckens värde ökar med dess position. Därför ger en jämförelse av två Base32hex-strängar tecken för tecken samma ordning som en jämförelse av de underliggande bytena. RFC 4648 lyfter fram detta som den egenskap som vanlig Base32 och Base64 saknar, och den gör Base32hex väl lämpad för nycklar i sorterad lagring som databaser och nyckel-värde-lager.

Håll alla strängar i samma skiftläge, och stäng av utfyllnad när indata har olika längd: tecknet = sorteras mellan siffrorna och bokstäverna och kan bryta ordningen.

Base32hex i DNSSEC NSEC3

NSEC3-poster, som definieras i RFC 5155, bevisar att ett DNS-namn inte finns och gör det samtidigt svårare att lista alla namn i zonen. Varje namn hashas med SHA-1, och det 20 byte långa hashvärdet skrivs som en Base32hex-etikett på 32 tecken utan utfyllnad, oftast visad med gemener. Eftersom kodningen behåller hashvärdenas ordning bildar de hashade namnen en sorterad kedja. För att göra om ett hashvärde till en sådan etikett klistrar du in det som hexindata, stänger av utfyllnad och väljer Gemener. Verktyget utför bara kodningssteget; det beräknar inte den saltade, itererade NSEC3-hashen.

Base32hex i programkod

# 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)

Specifikation

Alfabet0-9 A-V
Utdatastorlek8 tecken per 5 byte (160 %)
Utfyllnad= fyller ut till en multipel av 8 tecken
StandardRFC 4648 avsnitt 7
SkiftlägeskänsligNej

Exempel

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

Vanliga frågor

Vad är skillnaden mellan Base32 och Base32hex?
Båda använder 5 bitar per tecken och samma regler för utfyllnad. Vanlig Base32 använder A-Z 2-7; Base32hex använder 0-9 A-V, vilket behåller datans sorteringsordning. De två kan inte bytas mot varandra.
Är Base32hex skiftlägeskänslig?

Alfabetet är definierat med versaler, men den här avkodaren accepterar även gemener. Slå på Gemener om du behöver utdata med gemener, till exempel för DNS-etiketter.

Ska jag använda utfyllnad?
RFC 4648 fyller ut med = till en multipel av 8 tecken, men många format, däribland NSEC3, utelämnar den. Avkodaren accepterar båda, så välj det som det mottagande systemet förväntar sig.
Är en Base32hex-sträng samma sak som hexadecimal form?
Nej. En Base32hex-sträng som råkar innehålla bara 0-9 och A-F ser ut som hex, men varje tecken bär 5 bitar i stället för 4. För att arbeta med vanlig hex använder du Base16-verktyget.