
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.

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.
💻 Instalación
Ejecuta los comandos según tu caso
Ejecuta el proyecto
#BATCH1python 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)

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

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
#PYTHON1def 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
#PYTHON1def 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.
#PYTHON1 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
#PYTHON1 # 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.