HomePROYECTOS

GIE Cifrar y Descifrar archivos

¡Un cifrador y descifrador para archivos y carpetas!
Apr 10 2024
4 min readPython, Tools
GIE Python
imageTitle
imageTitle
Static Badge
Static Badge
Static Badge
Static Badge
Static Badge
Static Badge

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.

aCreator
aCreator

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

Python3

Colorama

Subprocess

Hashlib

Cryptography

💻 Instalación

Ejecuta los comandos según tu caso (Win o Linux)

pyhon para windows

Clona o descarga este repositorio

#BATCH
1git clone git@github.com:aiskoa/GIE.git
2

Cambia de directorio

#BATCH
1cd GIE
2

Ejecuta el archivo setup.py

#BATCH
1python setup.py
2

O instala las dependencias manualmente

Ejecuta el proyecto

#BATCH
1python gie.py -h
2

Para Cifrar

Ejecuta -h para imprimir la ayuda/uso

#BATCH
1python gie.py -h
2

Para Cifrar una carpeta o archivo

  • ! La ruta debe estar entre comillas " "

Para carpetas

#BATCH
1python gie.py "C:\TU\CARPETA"
2

Solo para archivos

#BATCH
1python 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

#BATCH
1python gie.py -p "CONTRASEÑA" -d "C:\TU\CARPETA"
2

Solo para archivos

#BATCH
1python 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

#PYTHON
1def 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

#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    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ó!

📝 Licencia

Copyright © 2024 aiskoa. Este proyecto tiene licencia MIT.

Did you like this article? Share it!

© 2025