Codificador y decodificador Base85

Convierte texto, bytes en hexadecimal o archivos a Base85 y viceversa. Esta página usa el juego de caracteres de RFC 1924, la variante que genera b85encode de Python y que se usa en los parches binarios de Git.

Se ejecuta por completo en tu navegador. No se sube nada.

Cómo se usa

  1. Elige Codificar para convertir texto o bytes en Base85, o Decodificar para convertir Base85 de nuevo en datos.
  2. Escribe o pega la entrada, o abre un archivo. Cambia el Formato de entrada a Hexadecimal si trabajas con bytes sin procesar.
  3. El resultado se actualiza mientras escribes. Al decodificar, elige Texto o Hexadecimal como Formato de salida según lo que contengan los datos.
  4. Copia el resultado o descárgalo como archivo.

¿Qué es Base85?

Base85 es una familia de codificaciones que convierten cada 4 bytes en 5 caracteres. Cinco dígitos en base 85 pueden representar 85 × 85 × 85 × 85 × 85 = 4 437 053 125 valores, justo lo suficiente para cualquier número de 32 bits, así que la salida solo ocupa un 25 % más que la entrada, frente al 33 % de Base64.

Existen varios alfabetos Base85 y no son intercambiables: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) y el de esta página. Este usa 0-9, A-Z, a-z y 23 símbolos: !#$%&()*+-;<=>?@^_`{|}~. Quedan fuera las comillas, la coma, el punto, la barra, los dos puntos, la barra invertida y los corchetes.

RFC 1924, Git y Python

El juego de caracteres procede de RFC 1924, "A Compact Representation of IPv6 Addresses" (una representación compacta de las direcciones IPv6), publicada el 1 de abril de 1996 como broma del April Fools' Day, el día de las bromas en el mundo anglosajón. Proponía escribir una dirección IPv6 de 128 bits como un único número en base 85 de exactamente 20 caracteres. Nadie escribe así las direcciones IPv6, pero más tarde el alfabeto se reutilizó para datos binarios en general:

  • Git guarda los archivos binarios de los parches (git diff --binary, git format-patch) como datos comprimidos con zlib y codificados con este alfabeto, con un carácter de longitud al principio de cada línea.
  • Python 3.4 y versiones posteriores ofrecen base64.b85encode() y b85decode(), cuya salida coincide con la de esta herramienta.
  • Mercurial usa la misma codificación para los archivos binarios en los diffs de estilo Git.

Ten en cuenta que RFC 1924 convierte toda la dirección de 128 bits de una vez, mientras que Git, Python y esta herramienta trabajan en grupos de 4 bytes, así que un valor de 16 bytes da un resultado distinto del que se obtiene con el método de la RFC.

Grupos finales incompletos

Cuando la longitud de la entrada no es múltiplo de 4, el último grupo se completa con bytes cero, se codifica y solo se conservan los n + 1 primeros caracteres: 1 byte da 2 caracteres, 2 bytes dan 3 y 3 bytes dan 4. El decodificador invierte el proceso, así que no hacen falta caracteres de relleno. A diferencia de la z de Ascii85, esta variante no tiene ninguna abreviatura para los bytes cero.

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

Especificación

Alfabeto0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~
Tamaño de salida5 caracteres por cada 4 bytes (125%)
RellenoNinguno
EstándarJuego de caracteres de RFC 1924 (Git, Python b85)
Distingue mayúsculas y minúsculasSí

Ejemplos

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

Preguntas frecuentes

¿Base85 es lo mismo que Ascii85?
Usan la misma aritmética, pero caracteres distintos, así que su salida es diferente. Además, Ascii85 abrevia cuatro bytes cero como z y puede ir entre los delimitadores de Adobe. Usa la página Ascii85 para datos de PDF y PostScript.
¿RFC 1924 fue un estándar real?

No. Es una RFC informativa publicada como broma del 1 de abril y nunca se usó para direcciones IPv6. Su juego de caracteres se hizo popular más tarde gracias a Git y Python.

¿Cuánto más ocupa la salida de Base85?
Cada 4 bytes se convierten en 5 caracteres, así que la salida ocupa 1,25 veces la entrada. Base64 ocupa unas 1,33 veces. basE91 es algo más compacto todavía.
¿Puedo incluir Base85 en JSON o XML?
En JSON, sí: el alfabeto no tiene comillas dobles ni barra invertida, así que no hay que escapar nada. En XML y HTML hay que escapar los caracteres <, > y &. Base85 no es seguro para URL.