Cómo crear Base64 MIME
- Pega el texto en Entrada · texto. Ajuste de línea viene preajustado en 76 (MIME, LF).
- Deja Juego de caracteres en UTF-8 salvo que el mensaje declare otro, y usa el mismo valor en la cabecera
Content-Type. - Copia el Base64 ajustado de Salida · Base64, o pulsa Descargar para guardarlo como
base64.txt. - Para el cuerpo de certificados o claves, cambia Ajuste de línea a 64 (PEM). Para HTTP, JSON o cualquier cosa que quiera una sola línea, elige Ninguno.
Qué es Base64 MIME
MIME (RFC 2045) es el estándar que permite al correo llevar adjuntos, texto en otros idiomas y HTML. Cuando el cuerpo de una parte es binario o está lleno de bytes no ASCII, el remitente lo codifica en Base64 y lo marca con Content-Transfer-Encoding: base64. Además del Base64 normal, el RFC 2045 añade una regla de longitud: las líneas codificadas pueden tener como máximo 76 caracteres. Una línea de 76 caracteres contiene 57 bytes de entrada.
Una parte de texto codificada así tiene este aspecto; las dos líneas de Base64 son la salida de esta herramienta para la frase citada más abajo:
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
Q2Fmw6kgbWVudTogY3LDqG1lIGJyw7tsw6llLCBqYWxhcGXDsW8sIHNtw7ZyZ8Olc2JvcmQuIFRo
aXMgbGluZSBpcyBsb25nIGVub3VnaCB0byB3cmFwIGFmdGVyIDc2IGNoYXJhY3RlcnMu
El texto original era Café menu: crème brûlée, jalapeño, smörgåsbord. This line is long enough to wrap after 76 characters., 108 bytes en UTF-8. Decodificadas con el decodificador Base64, las dos líneas juntas devuelven la frase; el salto de línea se ignora.
Saltos de línea, CRLF y tamaño
Ajuste de línea ofrece dos variantes de 76 columnas: 76 (MIME, LF) separa las líneas con un salto de línea (\n) y 76 (MIME, CRLF) usa \r\n. El correo en tránsito usa CRLF, y las bibliotecas de correo convierten los finales de línea al serializar un mensaje, así que LF sirve para código. Si pegas la salida directamente en un archivo .eml en bruto o en una sesión SMTP, elige la variante CRLF.
El ajuste cuesta un poco de espacio extra, además del 33 % habitual:
| Salida | Caracteres por cada 57 bytes de entrada | Sobrecarga |
|---|---|---|
| Una línea, sin saltos | 76 | 33,3 % |
| Líneas de 76 caracteres con LF | 77 | 35,1 % |
| Líneas de 76 caracteres con CRLF | 78 | 36,8 % |
Los límites de tamaño del correo se aplican al mensaje codificado, así que un adjunto de 10 MB necesita unos 13,7 MB del límite. La calculadora de tamaño da las cifras exactas, y Base64 en el correo electrónico explica cómo encajan las partes.
Encoded-words para las cabeceras
Cabeceras como Subject y From no pueden usar Content-Transfer-Encoding. El texto no ASCII en las cabeceras usa encoded-words del RFC 2047: =?charset?B?base64?=. Para crear uno, codifica el texto con Ajuste de línea en Ninguno y envuelve tú el resultado:
Subject: =?UTF-8?B?R3LDvMOfZSBhdXMgQmVybGlu?=
Eso se decodifica en Grüße aus Berlin. Un encoded-word puede tener como máximo 75 caracteres; los asuntos más largos se dividen en varios encoded-words separados por un espacio. Para texto casi todo ASCII, el software de correo suele usar en su lugar la forma ?Q?, basada en quoted-printable.
Base64 MIME en código y en la línea de comandos
base64.encodebytes de Python ajusta a 76 caracteres con \n y da las mismas líneas que esta herramienta:
import base64
text = "Café menu: crème brûlée, jalapeño, smörgåsbord. This line is long enough to wrap after 76 characters."
print(base64.encodebytes(text.encode("utf-8")).decode("ascii"))
Para mensajes completos, el paquete email se encarga de la codificación, las cabeceras y el CRLF. En Linux, GNU base64 ajusta a 76 por defecto y openssl base64 a 64:
base64 attachment.pdf > attachment.b64
openssl base64 -in attachment.pdf -out attachment.pem.b64
Para desmontar un correo en bruto, ábrelo en el decodificador de correo (EML), que extrae los cuerpos y los adjuntos.
Preguntas frecuentes
¿Por qué Base64 MIME usa líneas de 76 caracteres?
El RFC 2045 fija el límite en 76 caracteres, muy por debajo del límite de 998 caracteres por línea del correo (RFC 5322). 76 es múltiplo de 4, así que cada línea contiene exactamente 57 bytes.
¿Base64 MIME es distinto del Base64 normal?
El alfabeto y el relleno son idénticos. La única diferencia son los saltos de línea, y se espera que los decodificadores los ignoren, así que las versiones con y sin ajuste se decodifican en los mismos bytes.
¿Debo ajustar el Base64 en el asunto de un correo?
No. Las cabeceras usan encoded-words del RFC 2047, como =?UTF-8?B?R3LDvMOfZQ==?=, que no pueden contener saltos de línea. Codifica el asunto con Ajuste de línea en Ninguno y mantén cada encoded-word en 75 caracteres o menos.
¿Por qué openssl me da líneas de 64 caracteres?
openssl base64 ajusta a 64, la convención de PEM, mientras que GNU base64 y la mayoría de las bibliotecas de correo ajustan a 76. Ambos se decodifican igual; elige aquí 64 si necesitas una salida idéntica a la de openssl.