Base85-koder og -dekoder

Konvertér tekst, hexbytes eller filer til Base85 og tilbage. Denne side bruger RFC 1924-tegnsættet, den variant, som Python b85encode laver, og som bruges i binære Git-patches.

Kører udelukkende i din browser. Intet bliver uploadet.

Sådan bruger du værktøjet

  1. Vælg Kod for at omdanne tekst eller bytes til Base85, eller Afkod for at omdanne Base85 tilbage til data.
  2. Skriv eller indsæt dit input, eller åbn en fil. Sæt Input som til Hex, hvis du arbejder med rå bytes.
  3. Resultatet opdateres, mens du skriver. Ved afkodning vælger du Tekst eller Hex under Output som, alt efter hvad dataene indeholder.
  4. Kopiér resultatet, eller download det som en fil.

Hvad er Base85?

Base85 er en familie af kodninger, der omdanner hver gruppe på 4 bytes til 5 tegn. Fem cifre i base 85 kan rumme 85 × 85 × 85 × 85 × 85 = 4.437.053.125 værdier, lige nok til et vilkårligt 32-bit-tal, så outputtet er kun 25 % større end inputtet mod 33 % for Base64.

Der findes flere Base85-alfabeter, og de kan ikke bruges i flæng: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) og det, der bruges på denne side. Det består af 0-9, A-Z, a-z og 23 symboler: !#$%&()*+-;<=>?@^_`{|}~. Anførselstegn, komma, punktum, skråstreg, kolon, omvendt skråstreg og firkantede parenteser er udeladt.

RFC 1924, Git og Python

Tegnsættet stammer fra RFC 1924, "A Compact Representation of IPv6 Addresses", der blev udgivet den 1. april 1996 som en aprilsnar. Den foreslog at skrive en 128-bit IPv6-adresse som ét base-85-tal på præcis 20 tegn. Ingen skriver IPv6-adresser på den måde, men alfabetet blev senere genbrugt til binære data generelt:

  • Git gemmer binære filer i patches (git diff --binary, git format-patch) som zlib-komprimerede data kodet med dette alfabet, med et længdetegn i begyndelsen af hver linje.
  • Python 3.4 og nyere har base64.b85encode() og b85decode(), hvis output svarer til dette værktøjs.
  • Mercurial bruger samme kodning til binære filer i diffs i Git-stil.

Bemærk, at RFC 1924 konverterer hele den 128-bit adresse på én gang, mens Git, Python og dette værktøj arbejder i grupper på 4 bytes, så en værdi på 16 bytes giver et andet resultat end med RFC-metoden.

Korte slutgrupper

Når inputlængden ikke er et multiplum af 4, fyldes den sidste gruppe op med nulbytes og kodes, og kun de første n + 1 tegn beholdes: 1 byte bliver til 2 tegn, 2 bytes til 3 og 3 bytes til 4. Dekoderen vender processen om, så der er ikke brug for udfyldningstegn. I modsætning til z i Ascii85 har denne variant ingen genvej for nulbytes.

# Python 3.4+
import base64
base64.b85encode(b'hello')      # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv')    # b'hello'

Specifikation

Alfabet0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~
Outputstørrelse5 tegn pr. 4 bytes (125 %)
UdfyldningIngen
StandardRFC 1924-tegnsæt (Git, Python b85)
Skelner mellem store og små bogstaverJa

Eksempler

Input (UTF-8)Output
Hello, World!NM&qnZ!92JZ*pv8Ap
Base64.isLSb`dHZ(42a{
你好<h`KfrM&

Ofte stillede spørgsmål

Er Base85 det samme som Ascii85?
De bruger samme aritmetik, men forskellige tegn, så deres output er forskelligt. Ascii85 forkorter desuden fire nulbytes til z og kan være omgivet af Adobes afgrænsere. Brug siden Ascii85 til PDF- og PostScript-data.
Var RFC 1924 en rigtig standard?

Nej. Det er en informativ RFC, der blev udgivet som aprilsnar, og den blev aldrig brugt til IPv6-adresser. Tegnsættet blev først populært senere gennem Git og Python.

Hvor meget større er Base85-output?
Hver gruppe på 4 bytes bliver til 5 tegn, så outputtet er 1,25 gange så stort som inputtet. Base64 er ca. 1,33 gange. basE91 er endnu en smule mere kompakt.
Kan jeg bruge Base85 i JSON eller XML?
I JSON, ja: Alfabetet indeholder hverken dobbelte anførselstegn eller omvendt skråstreg, så intet skal escapes. I XML og HTML skal tegnene <, > og & escapes. Base85 er ikke URL-sikker.