Cómo se usa
- Elige Codificar para convertir texto o bytes en Base85, o Decodificar para convertir Base85 de nuevo en datos.
- Escribe o pega la entrada, o abre un archivo. Cambia el Formato de entrada a Hexadecimal si trabajas con bytes sin procesar.
- El resultado se actualiza mientras escribes. Al decodificar, elige Texto o Hexadecimal como Formato de salida según lo que contengan los datos.
- 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()yb85decode(), 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
| Alfabeto | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| Tamaño de salida | 5 caracteres por cada 4 bytes (125%) |
| Relleno | Ninguno |
| Estándar | Juego de caracteres de RFC 1924 (Git, Python b85) |
| Distingue mayúsculas y minúsculas | Sí |
Ejemplos
| Entrada (UTF-8) | Salida |
|---|---|
Hello, World! | NM&qnZ!92JZ*pv8Ap |
Base64.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
Preguntas frecuentes
¿Base85 es lo mismo que Ascii85?
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?
¿Puedo incluir Base85 en JSON o XML?
<, > y &. Base85 no es seguro para URL.