Inicio › Herramientas para desarrolladores › Herramienta para cifrar archivos

Herramienta para cifrar archivos

Bloquea cualquier archivo (un PDF, una foto, un archivo ZIP, una hoja de cálculo) con una contraseña antes de enviarlo por correo o guardarlo en la nube. El archivo se cifra con AES-256-GCM en tu propio dispositivo, y la misma página descifra el archivo .enc para recuperar el original.

Última actualización:

Suelta aquí los archivos para cifrarlos

Cualquier tipo de archivo: documentos, fotos, archivos comprimidos, videos. Los archivos se cifran en tu dispositivo y nunca se suben.

AES-256-GCM en bloques autenticados de 1 MiB · clave PBKDF2-SHA256 · sal y nonce aleatorios por archivo · funciona localmente con la API WebCrypto. La contraseña nunca se guarda; si la pierdes, el archivo no se puede recuperar.

Publicidad
Publicidad

Cómo usar Herramienta para cifrar archivos

  1. Elige Cifrar archivos y suelta uno o más archivos en el recuadro, o pulsa Elegir archivos.
  2. Escribe dos veces una contraseña segura, o pulsa Generar y guarda la contraseña generada en tu gestor de contraseñas.
  3. Pulsa Cifrar archivos y descarga cada archivo .enc (o todos juntos en un ZIP).
  4. Para abrir un archivo más tarde, suelta aquí el archivo .enc: la herramienta cambia a Descifrar. Escribe la misma contraseña y pulsa Descifrar archivos.
  5. Descarga el archivo descifrado: recupera su nombre y tipo originales, y la herramienta confirma que no se ha modificado.

Cómo funciona el cifrado de archivos

  1. Derivación de clave: se genera una sal aleatoria de 16 bytes para cada archivo, y se deriva una clave AES de 256 bits de tu contraseña con PBKDF2-HMAC-SHA256. El número de iteraciones (600,000 por defecto) se guarda en el archivo para poder descifrarlo más tarde aunque hayas elegido otro ajuste.
  2. Metadatos: el nombre original del archivo, el tipo MIME, el tamaño y la fecha de modificación se cifran como un pequeño primer registro, así que el archivo .enc no revela nada de su contenido salvo su tamaño aproximado.
  3. AES-GCM por bloques: el contenido se divide en bloques de 1 MiB. Cada bloque se cifra con AES-256-GCM usando un nonce único de 12 bytes (un prefijo aleatorio de 8 bytes más un contador de bloque de 4 bytes) y recibe su propia etiqueta de autenticación de 16 bytes.
  4. Detección de manipulación: la cabecera, el número de bloque y un indicador de "último bloque" se autentican como datos adicionales. Cambiar cualquier byte, intercambiar dos bloques o cortar el archivo hace que el descifrado falle en lugar de devolver datos dañados.

Formato del archivo .enc

DesplazamientoBytesContenido
04Firma FTCE (hex 46 54 43 45)
41Versión del formato, 0x01
54Iteraciones de PBKDF2, sin signo big-endian (600,000 = 00 09 27 C0)
916Sal
258Prefijo del nonce
334Tamaño de bloque en bytes (1,048,576)
374Longitud L de los metadatos cifrados
41LMetadatos cifrados (JSON con nombre, tipo, tamaño, mtime) + etiqueta de 16 bytes, bloque número 0
41 + LrestoBloques de datos 1…n, cada uno con hasta 1 MiB de texto cifrado + etiqueta de 16 bytes

Para el bloque número i, el IV es nonce prefix || uint32_be(i) y los datos autenticados adicionales son header (37 bytes) || uint32_be(i) || final, donde final vale 1 solo para el último bloque de datos. Un archivo vacío sigue produciendo un bloque final (vacío).

Descifrar un archivo .enc en Python

import json, struct, sys
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

def decrypt_file(path, password):
    data = open(path, 'rb').read()
    header = data[:37]
    assert header[:4] == b'FTCE' and header[4] == 1, 'not an FTCE v1 file'
    iterations, = struct.unpack('>I', header[5:9])
    salt, prefix = header[9:25], header[25:33]
    chunk, = struct.unpack('>I', header[33:37])
    key = PBKDF2HMAC(hashes.SHA256(), 32, salt, iterations).derive(password.encode())
    gcm = AESGCM(key)
    iv = lambda i: prefix + struct.pack('>I', i)
    aad = lambda i, final: header + struct.pack('>I', i) + bytes([final])
    mlen, = struct.unpack('>I', data[37:41])
    meta = json.loads(gcm.decrypt(iv(0), data[41:41 + mlen], aad(0, 0)))
    body, size = data[41 + mlen:], chunk + 16
    pieces = [body[o:o + size] for o in range(0, len(body), size)]
    out = b''.join(gcm.decrypt(iv(i + 1), c, aad(i + 1, int(i == len(pieces) - 1)))
                   for i, c in enumerate(pieces))
    return meta['n'], out

name, content = decrypt_file(sys.argv[1], sys.argv[2])
open(name, 'wb').write(content)
print('wrote', name, len(content), 'bytes')

Consejos para cifrar archivos de forma segura

  • Usa un gestor de contraseñas. Genera aquí una contraseña de 20 caracteres, guárdala en tu gestor de contraseñas junto con una nota sobre qué archivo abre y solo entonces borra el original sin cifrar.
  • Prueba antes de borrar. Después de cifrar, pulsa Prueba: descifrarlos (o descifra una vez el archivo descargado) para confirmar que la contraseña funciona.
  • Cifra las carpetas como un solo archivo. Pon primero muchos archivos en un ZIP (por ejemplo con el Creador de archivos ZIP) y luego cifra el archivo comprimido: una contraseña, un archivo para compartir, y los nombres de las carpetas también quedan ocultos.
  • Comparte la contraseña por separado. Si el archivo .enc va por correo, envía la contraseña por teléfono o mensaje de texto, nunca en el mismo hilo.
  • El cifrado no oculta el tamaño. El archivo .enc tiene más o menos el mismo tamaño que el original, así que alguien podría suponer que un archivo de 4 GB probablemente es un video.

Preguntas frecuentes

¿Se suben mis archivos a algún sitio?

No. Los archivos se leen y cifran con JavaScript en tu navegador usando la API WebCrypto, y el resultado se crea como una descarga en tu dispositivo. No se envía nada a FreeToolCabin ni a ningún otro servidor, y la herramienta sigue funcionando si te quedas sin conexión después de cargar la página.

¿Qué tan fuerte es el cifrado?

Cada archivo se cifra con AES-256 en modo GCM, el cifrado autenticado que usa TLS 1.3. La clave de 256 bits se deriva de tu contraseña con PBKDF2-HMAC-SHA256 y una sal aleatoria de 16 bytes (600,000 iteraciones por defecto, la recomendación de OWASP de 2023). En la práctica, el punto débil es la contraseña, así que usa una contraseña aleatoria larga o una frase de contraseña.

¿Qué pasa si olvido la contraseña?

El archivo no se puede recuperar. La contraseña nunca se guarda ni se transmite, y no hay puerta trasera ni restablecimiento. Guarda la contraseña en un gestor de contraseñas, separada del archivo cifrado.

¿Puedo enviar el archivo .enc por correo o subirlo a la nube?

Sí. El archivo .enc se puede compartir abiertamente; sin la contraseña no revela nada del contenido, e incluso el nombre original del archivo está oculto dentro de los datos cifrados. Envía la contraseña por otro canal, como una llamada o una aplicación de mensajería, nunca en el mismo correo.

¿Qué tamaño puede tener el archivo?

La herramienta lee y cifra el archivo en bloques de 1 MiB, pero el navegador guarda el resultado final en memoria hasta que lo descargas. Los archivos de varios cientos de megabytes funcionan en la mayoría de los ordenadores; los de varios gigabytes dependen de la RAM disponible y pueden fallar en los móviles.

¿Por qué el archivo cifrado es un poco más grande?

Cada bloque de 1 MiB recibe una etiqueta de autenticación de 16 bytes, y el archivo empieza con una cabecera de 37 bytes (firma, número de iteraciones, sal, nonce y tamaño de bloque) más el nombre de archivo cifrado. En un archivo de 10 MB, el aumento es muy inferior a 1 KB.

¿Puedo descifrar el archivo sin este sitio web?

Sí. El formato está documentado en esta página y solo usa primitivas estándar (PBKDF2-SHA256 y AES-256-GCM). El script de Python que se muestra abajo lo descifra con el conocido paquete cryptography, así que nunca dependes de esta herramienta.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Codificadores, hashes y criptografía →