Subir un archivo
  1. base64hub
  2. Otras bases
  3. Z85

Codificador y decodificador Z85 (ZeroMQ)

Pega bytes en hex para obtener Z85, la variante de Base85 que usa ZeroMQ para las claves CurveZMQ. La entrada debe ser múltiplo de 4 bytes, como exige la especificación, salvo que permitas un último bloque parcial.

Gratis sin registro, sin límites Local no se sube nada Fiel a la especificación pasa los vectores de prueba de ZeroMQ RFC 32 Actualizado 27 oct 2026
Entrada 0Bytes 0 BSalida 0

Se procesa en tu navegador. Esta página no puede enviar tus datos a ninguna parte – cómo lo sabemos

Cómo codificar y decodificar Z85

  1. Pega los bytes en hex en Entrada · Hex. Se aceptan espacios, dos puntos y prefijos 0x, así que un volcado hex se pega tal cual.
  2. Lee el Z85 en Salida · Z85 (ZeroMQ).
  3. Si el número de bytes no es múltiplo de 4, obtienes un error que indica cuántos hay. Marca Permitir último bloque parcial (no estándar) solo si ambas partes están de acuerdo en usar esa extensión.
  4. Para decodificar, haz clic en Z85 (ZeroMQ) → Hex en el selector de dirección y pega la cadena Z85. Pon A en Base64 o Texto para otras vistas, o usa Guardar bytes para obtener un archivo binario.

Los vectores de prueba de la especificación

La especificación Z85 de ZeroMQ (RFC 32 de la serie de RFC de ZeroMQ) da dos valores de prueba. Esta herramienta reproduce ambos:

HexZ85
86 4F D2 6F B5 59 F7 5BHelloWorld
8E 0B DD 69 76 28 B9 1D 8F 24 55 87 EE 95 C5 B0 4D 48 96 3F 79 25 98 77 B4 9C D9 06 3A EA D3 B7JTKVSB%%)wK0E.X)V>+}o?pNmC{O&4W4b!Ni{Lh6

El primero muestra la estructura de bloques: 8 bytes, dos bloques, diez caracteres. El segundo es una clave de 32 bytes y su codificación de 40 caracteres, el tamaño que ves en la configuración de CurveZMQ.

Algunos valores límite: cuatro bytes a cero son 00000, y cuatro bytes ff son %nSc0. Z85 no tiene atajo para los bloques de ceros, así que una secuencia de ceros sigue ocupando cinco caracteres por bloque.

Por qué ZeroMQ usa Z85

Las claves CurveZMQ son 32 bytes aleatorios. ZeroMQ necesitaba una forma de ponerlas en archivos de configuración, líneas de comandos y código fuente como cadenas simples. Z85 se diseñó para eso:

  • Ocupa un 25 % más que los bytes en bruto, frente al 33 % de Base64, así que una clave de 32 bytes son 40 caracteres en lugar de 44.
  • Su alfabeto no tiene ", ', \ ni backtick, así que una clave puede ir en un literal de cadena de C, Python o shell sin escapes. También evita , y ;.
  • Primero van los dígitos y las letras (0-9 a-z A-Z), seguidos de 23 signos de puntuación: .-:+=^!/*?&<>()[]{}@%$#.

Aun así contiene <, > y &, así que Z85 dentro de XML o HTML necesita escapes. En JSON no necesita ninguno.

Z85 en Python

Z85 y b85encode de Python comparten la aritmética y solo se diferencian en el alfabeto, así que una traducción de caracteres convierte uno en otro:

import base64

B85 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~"
Z85 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"
TO_Z85 = str.maketrans(B85, Z85)
FROM_Z85 = str.maketrans(Z85, B85)

def z85encode(data: bytes) -> str:
    if len(data) % 4:
        raise ValueError("Z85 needs a multiple of 4 bytes")
    return base64.b85encode(data).decode().translate(TO_Z85)

def z85decode(text: str) -> bytes:
    return base64.b85decode(text.translate(FROM_Z85))

z85encode(bytes.fromhex("864FD26FB559F75B"))   # 'HelloWorld'

Si ya dependes de PyZMQ, zmq.utils.z85.encode y decode hacen lo mismo. En C, libzmq tiene zmq_z85_encode y zmq_z85_decode. Hay más sobre el manejo de bytes en Python en la página de Python.

Problemas habituales

  • «Z85 codifica bloques de 4 bytes y los datos tienen N bytes». La entrada no está alineada a bloques. Comprueba que copiaste la clave entera; una clave de 32 bytes que muestra 31 ha perdido un par de dígitos hex.
  • «Z85 necesita grupos de 5 caracteres; sobran N». La cadena Z85 está cortada o tiene caracteres de más. Una clave CurveZMQ debe tener exactamente 40 caracteres.
  • La cadena se decodifica pero la clave no funciona. Puede ser Ascii85 o Base85 de Git, que comparten las reglas de longitud pero no el alfabeto, así que los mismos caracteres se decodifican en bytes distintos. Pruébala en la página de Base85 con De en otra variante.

Preguntas frecuentes

¿Por qué Z85 exige un múltiplo de 4 bytes?

La especificación solo define Z85 para bloques completos de 4 bytes, así que un decodificador puede contar con que cada 5 caracteres son 4 bytes. Los datos de otra longitud los tiene que rellenar o delimitar la aplicación. Marca Permitir último bloque parcial (no estándar) para codificar el final al estilo de Ascii85 de todos modos.

¿Cuánto mide una clave CurveZMQ en Z85?

40 caracteres. Las claves pública y secreta de CurveZMQ tienen 32 bytes, y 32 / 4 × 5 = 40. Es la longitud que devuelve zmq_curve_keypair(), más un nulo final en C.

¿Z85 es lo mismo que Ascii85?

Misma aritmética, distinto alfabeto. Los dos escriben 4 bytes como 5 dígitos en base 85, pero Z85 pone primero los dígitos y las letras y evita las comillas y la barra invertida, y no tiene el atajo z ni los delimitadores <~ ~>.

¿Cómo codifico Z85 en Python?

La biblioteca estándar no tiene Z85, pero base64.b85encode usa la misma aritmética, así que traducir el alfabeto de su salida da Z85. El fragmento de esta página hace justo eso. PyZMQ también incluye zmq.utils.z85.