Cifrar un Mensaje de Texto con Contraseña

Cifra un mensaje de texto con contraseña en un bloque Base64 compacto para pegar en correo o chat, todo en tu navegador, nunca se sube nada.

🌐 English

🔒 Privado por diseño: tu texto se procesa localmente en tu navegador; nada se sube nunca a ningún servidor.

Qué hay dentro de ese bloque en Base64

La salida parece texto aleatorio, pero tiene una estructura definida. Detrás del Base64 hay un pequeño contenedor binario: una firma de seis bytes que dice SFXENC, un byte de versión, el número de iteraciones de PBKDF2 como entero de 32 bits, la sal de 16 bytes, el nonce de 12 bytes, dos bytes de longitud de nombre, y después el mensaje cifrado con su etiqueta de autenticación pegada al final.

Eso sale a 41 bytes de cabecera más una etiqueta de 16 bytes, o sea 57 bytes de sobrecarga fija antes de que el Base64 lo expanda todo un tercio. Un mensaje de 40 caracteres aterriza por tanto en 97 bytes y 132 caracteres imprimibles. Los mensajes cortos están dominados por su propia cabecera, algo inevitable: la sal y el nonce tienen que viajar con el texto cifrado o nadie, tú incluido, podría descifrarlo jamás.

El campo de longitud de nombre es siempre cero aquí. Esta herramienta comparte su criptografía con cifrar un archivo con contraseña, cuyo contenedor reserva sitio para el nombre original del archivo para que al descifrar se restaure; un mensaje pegado no tiene nombre de archivo, así que el campo se deja vacío. Reutilizar ese código en lugar de escribir una segunda implementación significa que las dos herramientas heredan las mismas primitivas auditadas y la misma batería de pruebas.

La convención de marcadores, y un viaje de ida y vuelta completo

Hay una sola caja de texto, y la herramienta necesita dos valores tuyos, así que las secciones se marcan con líneas de cabecera. Para cifrar:

=== MESSAGE ===
La contraseña del wifi de invitados de la oficina es Trombon-Escalera-9
=== PASSWORD ===
caballo correcto grapa batería

Pulsa el botón y el resultado contiene una sección === CIPHERTEXT === con una línea larga de Base64. Copia el bloque entero. Para leerlo de vuelta más adelante, cambia el Modo a descifrar y pega:

=== CIPHERTEXT ===
<el bloque en Base64>
=== PASSWORD ===
caballo correcto grapa batería

Como la salida de cifrado ya etiqueta correctamente su propia sección, el resultado entero se puede pegar tal cual con las líneas de contraseña añadidas debajo. El pie === NOTES === que añade cada pasada de cifrado se reconoce como una sección por derecho propio y se descarta al volver a entrar, así que no hay nada que recortar antes.

Un viaje completo de ida y vuelta son cinco pasos:

  1. Deja el Modo en cifrar.
  2. Escribe o pega en la caja de texto las dos secciones marcadas de arriba, primero el mensaje y después la contraseña.
  3. Pulsa el botón y luego Copiar al portapapeles. Eso copia el resultado entero: el bloque === CIPHERTEXT === y el pie === NOTES === de debajo.
  4. Envía ese bloque a tu destinatario, y envía la contraseña por otra vía. Las dos mitades en la misma bandeja de entrada equivalen a no enviar nada cifrado.
  5. Para leerlo de vuelta, pon el Modo en descifrar, pega el bloque de texto cifrado con una sección === PASSWORD === debajo, y vuelve a pulsar.

PBKDF2 a 600.000 iteraciones, y por qué una contraseña débil pierde igual

El AES-256 no es el eslabón débil de este diseño. Tu contraseña sí. Las contraseñas tienen muchísima menos entropía que una clave de 256 bits, así que el hueco hay que taparlo encareciendo cada intento, que es lo que hace PBKDF2: aplica HMAC-SHA256 sobre la contraseña seiscientas mil veces antes de que el resultado se convierta en una clave AES.

Esa cifra salió de la hoja de referencia de almacenamiento de contraseñas de OWASP y no de la costumbre, y es el mismo número que usa el cifrado de archivos, porque esta herramienta importa las primitivas de aquel módulo en vez de volver a derivarlas. La derivación ocurre exactamente una vez por clic, no una vez por byte, así que el coste es una pausa fija al principio de la operación, idéntica tanto si el mensaje es una frase como si son diez páginas. Cuánto se note esa pausa es una propiedad de tu dispositivo y no de la herramienta, que es la respuesta honesta para cualquier cosa que se ejecute en local: un ordenador de sobremesa la absorbe, un móvil de hace cinco años no la va a disimular.

El motivo de que ese coste deliberado importe es que un atacante también lo paga, en cada intento. Una palabra de diccionario, un nombre, una fecha o Verano2026! caen igualmente, porque incluso a ese precio una lista corta de unos pocos millones de candidatos es una tarde. Una frase de contraseña de cuatro o cinco palabras no cae, porque no hay ninguna lista corta que triturar. Genera una con el generador de frases de contraseña, y si insistes en elegir la tuya, pásala antes por el verificador de fortaleza de contraseñas.

Una contraseña equivocada y un bloque manipulado fallan igual

Intenta descifrar con la contraseña equivocada y obtienes un único fallo claro, sin salida. Cambia un carácter en mitad del Base64 y obtienes el mismo fallo. Edita un byte de la cabecera, ni siquiera del texto cifrado, y lo obtienes otra vez.

Esto es el cifrado autenticado haciendo su trabajo, no un manejo de errores ordenado. El GCM produce una etiqueta sobre el texto cifrado, y la cabecera entera se le pasa como datos autenticados adicionales, así que todos los campos quedan cubiertos por esa etiqueta. La verificación pasa o no pasa. No hay descifrado parcial, ni frases medio recuperadas, ni riesgo de que te muestren basura de aspecto verosímil y la confundas con el mensaje real.

La otra cara es que la herramienta no puede decirte cuál de los dos errores cometiste. “Contraseña equivocada” y “bloque corrupto” son el mismo suceso para el cifrador, y una herramienta que adivinara entre los dos se estaría inventando información. Después de un descifrado correcto se hace una comprobación más: los bytes recuperados tienen que ser texto UTF-8 válido, y si no lo son recibes un mensaje distinto que lo dice, que es la firma de un bloque truncado justo en el punto equivocado.

Dos canales, o no has cifrado nada

Cifrar traslada el secreto del mensaje a la contraseña. Si las dos cosas viajan por la misma vía, una bandeja de entrada comprometida o una ventana de chat mirada por encima del hombro entrega el par completo y el texto cifrado era puro teatro.

Manda el bloque por correo y dicta la contraseña en una llamada. Publica el bloque en un ticket y pasa la contraseña por un mensaje directo aparte. Acordad una frase de contraseña en persona una vez y reutilizadla una temporada. Cualquiera de esas cosas encarece de verdad la interceptación; poner las dos en el mismo hilo no.

Lo que esto no oculta

El contenido de tu mensaje es confidencial. Varias cosas de alrededor no lo son: cuánto medía el mensaje, cuándo lo enviaste, a quién se lo enviaste, y el hecho mismo de que se cifró con esta herramienta, que es lo que anuncia la firma SFXENC a cualquiera que descodifique el Base64. Esa firma está ahí para que la ruta de descifrado reconozca su propio formato y rechace educadamente cualquier entrada ajena.

Todo pasa por la Web Crypto API que viene con tu navegador. Ningún material de clave, ningún texto en claro y ninguna contraseña tocan la red, y una vez cargada esta página puedes desconectarte del todo y las dos direcciones siguen funcionando. Para un documento entero en lugar de una nota pegada, la hermana basada en archivos enlazada más arriba usa las primitivas idénticas; y para leer una cadena Base64 normal que no es texto cifrado en absoluto, decodificar Base64 es la herramienta adecuada.

Cómo funciona, en imágenes

Captura de pantalla de la herramienta Cifrar un Mensaje de Texto con Contraseña con la entrada de ejemplo «Everything on SysFenix runs in your browser. You…», Mode en Encrypt
Cifrar un Mensaje de Texto con Contraseña en pleno proceso: la entrada de ejemplo «Everything on SysFenix runs in your browser. You…», Mode en Encrypt.
Captura de pantalla del resultado de Cifrar un Mensaje de Texto con Contraseña mostrando la salida generada «=== ENCRYPT TEXT MESSAGE === Mode: encrypt Statu…»
El resultado final: la salida generada «=== ENCRYPT TEXT MESSAGE === Mode: encrypt Statu…». El enlace de descarga es una URL blob local: el archivo nunca sale de tu dispositivo.

Preguntas frecuentes

¿En qué se diferencia esto de simplemente adjuntar un archivo cifrado?

Esta herramienta es para texto corto (un mensaje, una nota, unas credenciales) que quieres pegar directamente en el cuerpo de un correo o chat, en lugar de un archivo adjunto. Usa el mismo cifrado AES-256-GCM real que la herramienta Cifrar un Archivo con Contraseña de este sitio, pero el resultado cifrado es un bloque de texto Base64 compacto e imprimible en lugar de un archivo .enc descargable, así que encaja directamente en cualquier cuadro de mensaje.

¿El mensaje o la contraseña se envían alguna vez a un servidor?

No. Tanto la derivación de clave PBKDF2 como el cifrado AES-256-GCM se ejecutan enteramente dentro de tu pestaña del navegador usando la Web Crypto API ya integrada en todo navegador moderno. El mensaje que escribes y la contraseña que usas nunca se transmiten, registran ni almacenan en ningún sitio, podrías desconectarte de internet después de que esta página cargue y la herramienta seguiría funcionando exactamente igual.

¿Cómo introduzco el mensaje, el texto cifrado y la contraseña en un solo cuadro de texto?

Pega tu entrada usando líneas marcadoras, una por sección. Para cifrar, usa `=== MESSAGE ===` seguido de tu texto y `=== PASSWORD ===` seguido de tu contraseña. Para descifrar, usa `=== CIPHERTEXT ===` seguido del bloque Base64 que produjo esta herramienta y `=== PASSWORD ===` seguido de la misma contraseña. Mira "Cómo cifrar un mensaje de texto" abajo para un ejemplo completo.

¿Qué cifrado usa esto en concreto?

AES-256-GCM (clave de 256 bits, cifrado autenticado) con la clave derivada de tu contraseña mediante PBKDF2-HMAC-SHA256 a 600.000 iteraciones, el mínimo actual recomendado por OWASP para PBKDF2-SHA256, verificado directamente contra la propia Guía de Almacenamiento de Contraseñas de OWASP en lugar de asumido de memoria. Se genera una sal aleatoria fresca y un IV/nonce aleatorio fresco para cada mensaje que cifras, nunca reutilizados, cifrar el mismo mensaje con la misma contraseña dos veces produce dos bloques Base64 completamente distintos.

¿Qué pasa si descifro con la contraseña equivocada, o pego un bloque de texto cifrado corrupto?

Obtienes un único error claro y no se produce ningún mensaje, nunca un texto ilegible o parcialmente descifrado presentado silenciosamente como real. Esto es una propiedad real de AES-GCM como cifrado autenticado, no solo un manejo de errores cuidadoso: el texto cifrado lleva una etiqueta de autenticación criptográfica, así que una contraseña equivocada y un bloque corrupto o editado a mano se detectan de la misma manera y se rechazan directamente. Por cómo funciona el cifrado autenticado, la herramienta deliberadamente no puede decirte cuál de los dos pasó, solo que el descifrado falló.

¿Hay un límite de longitud de mensaje?

No hay ningún límite artificial impuesto por esta herramienta. El cifrado ocurre enteramente en tu propio dispositivo, así que el límite práctico es la memoria disponible de tu navegador, de sobra para cualquier cosa que razonablemente pegarías en un correo o mensaje de chat, desde una nota corta hasta un bloque de texto muy largo.

Herramientas relacionadas