HomePROYECTOS

GIE-UI Cifrar y Descifrar archivos

¡Un cifrador y descifrador para archivos y carpetas con interfaz de usuario!
Apr 29 2024
4 min readPython, Tools
GIE-UI
imageTitle
imageTitle

GIE-UI

GIE ahora con Interfaz de Usuario || Cifrar y Descifrar Archivos

Un cifrador y descifrador de archivos usando AES, de forma fácil y para carpetas, y envíalo de forma segura, escrito en Python con interfaz de usuario.

Screenshott
Screenshott

Características

Cifra y descifra tus archivos y carpetas con AES, para cualquier archivo, jpg, png, mp4, mp3, docx, pdf, etc...

¿Por qué GIE?

GIE es el nombre de mi primera novia (es broma 😂), GIE es el acrónimo de cifrado de archivos Gentil, Inteligente y Fácil.

📦 Requisitos

  • Python, debería estar instalado en tu sistema (no es necesario).

🦠 Anuncio de Antivirus

GIE tiene la capacidad de cifrar rutas y archivos vitales en tu sistema, por lo que es considerado un riesgo por el sistema operativo. Si aún así decides usarlo, deberías crear una excepción para el programa GIE.

Análisis de Virustotal

Triage

💻 Instalación

Ejecuta los comandos según tu caso

Ejecuta el proyecto

#BATCH
1python main.py
2

Ejecuta el archivo GIE.exe. (La versión portable de GIE está disponible)


Para Cifrar

Para Cifrar una carpeta o archivo

Para carpetas (debes escribir la ruta tal como aparece en tu explorador de archivos)

PATH
PATH

Solo para archivos (uno o más archivos)

Solo selecciona los archivos a cifrar.

soporta = jpg, png, mp3, mp4, docx, xlsx, sql, py, zip, etc...

Introduce una contraseña:

IMPORTANTE

La contraseña no puede contener los caracteres $ o "" y '' La contraseña no será visible mientras la escribes.

Cuando hagas clic en el botón Cifrar, la operación comenzará., comenzará a cifrar los archivos con la extensión ".gie" y generará un archivo ".GKY", que es muy importante para descifrar tu archivo original.

"GKY" es la extensión del archivo que contiene la clave para el descifrado, junto con la contraseña proporcionada.

! Si quieres compartir el archivo con tu colega, tendrás que proporcionarle tres archivos, el .gie, el .GKY y la contraseña.

EJEMPLO

FileEn
FileEn

Para Descifrar

Para Descifrar una carpeta o archivo

IMPORTANTE

La contraseña debe ser la misma que la utilizada para cifrar el archivo, de lo contrario perderás tu archivo para siempre.

El programa buscará si el archivo .GKY existe en la ruta proporcionada e intentará descifrar el archivo con la contraseña, si la contraseña no coincide, el archivo no se descifrará o se descifrará corrupto, si el GKY no existe, el programa mostrará un mensaje de error y no podrá descifrar.

Es muy importante guardar muy bien el .GKY y la CONTRASEÑA.


FUNCIÓN DE CIFRADO

#PYTHON
1def encrypt_file(input_file: str, password: str):
2    password_bytes = password.encode()  
3    # Convertir la contraseña a bytes
4
5    key_with_salt = generate_key(input_file, password_bytes)  # Generar la clave usando bytes
6    if key_with_salt is None:
7        print(Fore.RED + "No se pudo generar la clave." + Style.RESET_ALL)
8        return
9
10    key = key_with_salt[16:]  # Obteniendo la clave sin la sal
11
12    iv = os.urandom(16)
13
14    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
15    encryptor = cipher.encryptor()
16
17    with open(input_file, "rb") as file_in:
18        data = file_in.read()
19
20    padded_data = data + b'\x00' * (-len(data) % 16)
21    encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
22
23    output_file = input_file + ".gie"
24    with open(output_file, "wb") as file_out:
25        file_out.write(iv)
26        file_out.write(encrypted_data)
27
28    print(Fore.LIGHTMAGENTA_EX + f"Archivo ENCRIPTADO guardado como: {output_file}" + Style.RESET_ALL)
29    os.remove(input_file)
30

FUNCIÓN DE DESCIFRADO

#PYTHON
1def decrypt_file(input_file: str, password: bytes):
2    base_file = os.path.splitext(os.path.basename(input_file))[0]  # Eliminar todas las extensiones
3    while "." in base_file:
4        base_file = os.path.splitext(base_file)[0]  # Eliminar todas las extensiones
5    # Añadir la extensión .key al nombre del archivo base
6    key_file = os.path.join(os.path.dirname(input_file), base_file + ".GKY")
7    key_file = os.path.normpath(key_file)  # Normalizar la ruta
8
9    print(f"Buscando el archivo de la clave: {key_file}")  # Imprimir el nombre del archivo de clave que estamos buscando
10    if os.path.exists(key_file):
11        with open(key_file, "rb") as f:
12            key_with_salt = f.read()
13            salt = key_with_salt[:16]  # Obtener la sal almacenada
14            derived_key = hashlib.pbkdf2_hmac('sha256', password, salt, 100000, 32)
15

.GKY se usa para descifrar el archivo porque es la clave de paso, el nombre de la extensión .GKY no se puede cambiar.

#PYTHON
1        with open(input_file, "rb") as file_in:
2            iv = file_in.read(16)
3            encrypted_data = file_in.read()
4
5        cipher = Cipher(algorithms.AES(derived_key), modes.CBC(iv), backend=default_backend())
6        decryptor = cipher.decryptor()
7
8        decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize()
9        unpadded_data = decrypted_data.rstrip(b'\x00')
10
11        output_file = os.path.splitext(input_file)[0]
12        with open(output_file, "wb") as file_out:
13            file_out.write(unpadded_data)
14
15        print(Fore.LIGHTCYAN_EX + f"Archivo DESENCRIPTADO guardado como: {output_file}" + Style.RESET_ALL)
16        os.remove(input_file)
17
#PYTHON
1        # Eliminar el archivo de clave después del descifrado exitoso
2        os.remove(key_file)
3    else:
4        print(Fore.LIGHTRED_EX + "Clave no encontrada." + Style.RESET_ALL)
5

Si el archivo GKY no se elimina después del descifrado, es posible que genere basura en tu sistema o incluso problemas con otros archivos cifrados.


⬇️ Descargar ⬇️

🤝 Contribuyendo

¡Las contribuciones, los problemas y las solicitudes de características son bienvenidos! Siéntete libre de consultar la página de problemas.

💜 Muestra tu apoyo

¡Da una ⭐️ si este proyecto te ayudó!

📝 Licencia

Copyright © 2024 aiskoa. Este proyecto tiene licencia MIT.


Did you like this article? Share it!

© 2025