Codificador y decodificador Base45

Convierte texto, bytes en hexadecimal o archivos a Base45 y viceversa. Base45 usa los 45 caracteres del modo alfanumérico de los códigos QR, así que los datos binarios caben en un código QR con poca sobrecarga.

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

Cómo se usa

  1. Elige Codificar para convertir texto en Base45 o Decodificar para convertir Base45 de nuevo en texto o bytes.
  2. Escribe o pega la entrada, o abre un archivo. Conserva los espacios: forman parte del alfabeto.
  3. Al decodificar datos binarios, como el contenido de un certificado, cambia el Formato de salida a Hexadecimal.
  4. Copia el resultado o descárgalo como archivo.

¿Qué es Base45?

Base45 se define en RFC 9285. Su alfabeto lo forman los dígitos 0-9, las letras mayúsculas A-Z y nueve símbolos: el espacio y $ % * + - . / :. Son exactamente los 45 caracteres que un código QR puede almacenar en su modo alfanumérico compacto. Ten en cuenta que el espacio es un carácter real del alfabeto, no un separador.

El codificador toma la entrada de dos en dos bytes, los lee como un número de 0 a 65535 y escribe ese número como tres dígitos Base45, empezando por el menos significativo. Un último byte suelto se convierte en dos caracteres. Como texto, el resultado ocupa 1,5 veces el tamaño de la entrada, más que Base64.

Por qué Base45 es ideal para códigos QR

En el modo alfanumérico, un código QR empaqueta dos caracteres en 11 bits. Base64 no puede usar ese modo porque necesita letras minúsculas, así que recurre al modo byte, con 8 bits por carácter, lo que supone unos 10,7 bits por cada byte de datos. Base45 solo necesita 8,25 bits por byte en el modo alfanumérico, de modo que los mismos datos caben en un código QR más pequeño y más fácil de escanear.

Al decodificar, conserva los espacios exactamente como están; solo se ignoran los saltos de línea. Las letras minúsculas no forman parte del alfabeto y se indican como no válidas.

Decodificar certificados COVID digitales de la UE

Los códigos QR de los certificados COVID digitales de la UE contienen un texto que empieza por HC1:. El resto es Base45: los datos del certificado se codifican en CBOR, se firman con COSE, se comprimen con zlib y, por último, se codifican en Base45. Para ver su contenido:

  1. Quita el prefijo HC1:. Sus cuatro caracteres son Base45 válido, así que, si los dejas, se obtienen bytes incorrectos.
  2. Decodifica el resto aquí con el Formato de salida en Hexadecimal. Los datos zlib suelen empezar por el byte 78.
  3. Descomprime los bytes con zlib y analiza el CBOR con otra herramienta.

Esta herramienta solo se encarga del paso Base45. No descomprime los datos, no los analiza ni verifica la firma.

Base45 en código

# Python (pip install base45)
import base45
base45.b45encode(b'AB')     # ejemplo de RFC 9285: BB8
base45.b45decode('BB8')     # b'AB'

Especificación

Alfabeto0-9 A-Z espacio $ % * + - . / :
Tamaño de salida3 caracteres por cada 2 bytes (150%)
RellenoNinguno
EstándarRFC 9285
Distingue mayúsculas y minúsculasSí

Ejemplos

Entrada (UTF-8)Salida
Hello, World!%69 VDK2E:3404ESVDX0
Base64.isSH8LQEG%61*5P2
你好C-SEFK*.K

Preguntas frecuentes

¿Por qué la salida Base45 contiene espacios?

El espacio es uno de los 45 caracteres del alfabeto, así que transporta datos. No recortes los espacios del texto Base45 ni reduzcas varios a uno, o la decodificación fallará o dará bytes incorrectos.

¿Cómo decodifico una cadena HC1:?

Quita el prefijo HC1:, decodifica el resto con el Formato de salida en Hexadecimal, descomprime el resultado con zlib y lee los datos CBOR con otra herramienta. Esta herramienta solo realiza el paso Base45.

¿Base45 distingue entre mayúsculas y minúsculas?

Sí. Solo las letras mayúsculas forman parte del alfabeto, porque el modo alfanumérico de los códigos QR no tiene minúsculas. La entrada en minúsculas se indica como no válida, junto con su posición.

¿Base45 es más compacto que Base64?

Como texto plano, no: Base45 ocupa 1,5 veces el tamaño de la entrada y Base64 unas 1,33 veces. Dentro de un código QR, sí, porque Base45 puede usar el modo alfanumérico, que es más denso.