
GIE
Cifrar y Descifrar
Un cifrador y descifrador para archivos y carpetas para Windows, escrito en Python usando AES.
[!CAUTION] Descargo de responsabilidad: Esta herramienta fue creada solo con fines educativos. No me hago responsable del mal uso de esta herramienta.

Versión
GIE V3.0
Características
Cifra y descifra tus archivos y carpetas con AES, para cualquier archivo, jpg, png, mp4, mp3, docx, pdf, etc...
IMPORTANTE LEER TODO
📦 Requisitos
Subprocess
Hashlib
Cryptography
💻 Instalación
Ejecuta los comandos según tu caso (Win o Linux)
pyhon
para windows
Clona o descarga este repositorio
#BATCH1git clone git@github.com:aiskoa/GIE.git 2
Cambia de directorio
#BATCH1cd GIE 2
Ejecuta el archivo setup.py
#BATCH1python setup.py 2
O instala las dependencias manualmente
Ejecuta el proyecto
#BATCH1python gie.py -h 2
Para Cifrar
Ejecuta -h
para imprimir la ayuda/uso
#BATCH1python gie.py -h 2
Para Cifrar una carpeta o archivo
- ! La ruta debe estar entre comillas " "
Para carpetas
#BATCH1python gie.py "C:\TU\CARPETA" 2
Solo para archivos
#BATCH1python gie.py "C:\TUS\ARCHIVOS.extension" 2
extension = jpg, png, mp3, mp4, docx, etc, etc...
- ! Aparecerá un mensaje que dice: "Introduce una contraseña:"
! NOTA: La contraseña no puede contener los caracteres $ y "
Ejemplo de salida:
python gie.py "D:\Sam\Plugins\IP.exe"
Introduce una contraseña:
Nota: La contraseña no será visible mientras la escribes
Una vez introducida la contraseña, 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.
Para Descifrar
Para Descifrar una carpeta o archivo
- ! La ruta y la contraseña deben estar entre comillas " "
Ejecuta -d
para descifrar
Ejecuta -p
para establecer la contraseña utilizada anteriormente
Para carpetas
#BATCH1python gie.py -p "CONTRASEÑA" -d "C:\TU\CARPETA" 2
Solo para archivos
#BATCH1python gie.py -p "CONTRASEÑA" -d "C:\TUS\ARCHIVOS.extension.gie" 2
Ejemplo de salida:
python gie.py -p "L1ñy*8Cv" -d "D:\Sam\Plugins\IP.exe"
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() # Convertir la contraseña a bytes 3 key_with_salt = generate_key(input_file, password_bytes) # Generar la clave utilizando bytes 4 if key_with_salt is None: 5 print(Fore.RED + "No se pudo generar la clave." + Style.RESET_ALL) 6 return 7 8 key = key_with_salt[16:] # Obtener la clave sin la sal 9 10 iv = os.urandom(16) 11 12 cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()) 13 encryptor = cipher.encryptor() 14 15 with open(input_file, "rb") as file_in: 16 data = file_in.read() 17 18 padded_data = data + b'\x00' * (-len(data) % 16) 19 encrypted_data = encryptor.update(padded_data) + encryptor.finalize() 20 21 output_file = input_file + ".gie" 22 with open(output_file, "wb") as file_out: 23 file_out.write(iv) 24 file_out.write(encrypted_data) 25 26 print(Fore.LIGHTMAGENTA_EX + f"Archivo ENCRIPTADO guardado como: {output_file}" + Style.RESET_ALL) 27 os.remove(input_file) 28
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 print(f"Buscando el archivo de la clave: {key_file}") # Imprimir el nombre del archivo de clave que estamos buscando 8 if os.path.exists(key_file): 9 with open(key_file, "rb") as f: 10 key_with_salt = f.read() 11 salt = key_with_salt[:16] # Obtener la sal almacenada 12 derived_key = hashlib.pbkdf2_hmac('sha256', password, salt, 100000, 32) 13 # print("La clave se recuperó con éxito.") 14 # print(f"Longitud de la clave: {len(derived_key)}") 15 # print(f"Longitud del salt: {len(salt)}") 16 17 with open(input_file, "rb") as file_in: 18 iv = file_in.read(16) 19 encrypted_data = file_in.read() 20 21 cipher = Cipher(algorithms.AES(derived_key), modes.CBC(iv), backend=default_backend()) 22 decryptor = cipher.decryptor() 23 24 decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize() 25 unpadded_data = decrypted_data.rstrip(b'\x00') 26 27 output_file = os.path.splitext(input_file)[0] 28 with open(output_file, "wb") as file_out: 29 file_out.write(unpadded_data) 30 31 print(Fore.LIGHTCYAN_EX + f"Archivo DESENCRIPTADO guardado como: {output_file}" + Style.RESET_ALL) 32 os.remove(input_file) 33 34 # Eliminar el archivo de clave después del descifrado exitoso 35 os.remove(key_file) 36 # print(f"Archivo de la clave {key_file} eliminado con éxito.") 37 38 else: 39 print(Fore.LIGHTRED_EX + "No se encontró la clave." + Style.RESET_ALL) 40 41
Lista de Tareas
-
Comprobación de contraseña
-
AES
-
Menú de interfaz de usuario
🤝 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ó!