Este proyecto es un sistema de cifrado híbrido que combina cifrado simétrico (AES-256) y cifrado asimétrico (RSA) para proteger archivos. Utiliza la biblioteca de criptografía de Java (javax.crypto
) y proporciona una interfaz de línea de comandos (CLI) para cifrar y descifrar archivos.
El sistema permite:
- Cifrar archivos: Los archivos se cifran con una clave AES-256 generada aleatoriamente. La clave AES se cifra utilizando RSA con claves públicas y privadas generadas dinámicamente. El archivo cifrado resultante tiene la extensión
.lock
, mientras que la clave AES cifrada se guarda en un archivo con la extensión.key
. - Descifrar archivos: Utilizando la clave privada RSA, el sistema descifra la clave AES y luego descifra el archivo original, devolviéndolo a su formato original.
Antes de ejecutar el proyecto, asegúrate de tener instalado lo siguiente:
- Java Development Kit (JDK) 8 o superior
-
Clona este repositorio:
git clone https://github.com/lpedraoss/CipherBox.git cd cipherbox
-
Compila el proyecto:
javac -d bin -sourcepath src src/Main.java
-
Ejecuta el proyecto:
java -cp bin Main
-
Coloca los archivos que deseas cifrar en la carpeta
src/data
. -
Ejecuta el programa:
java -cp bin Main
-
Selecciona la opción "1. Cifrar un archivo" y sigue las instrucciones en pantalla para elegir un archivo y especificar un alias para las claves y archivos cifrados.
-
Ejecuta el programa:
java -cp bin Main
-
Selecciona la opción "2. Descifrar un archivo" y elige el archivo
.lock
que deseas descifrar.
El programa limpiará automáticamente la consola según el sistema operativo que utilices:
- Windows: Utiliza
cls
. - Linux/MacOS: Utiliza
clear
.
El programa generará varios archivos:
.lock
: El archivo cifrado..key
: La clave AES cifrada con RSA..extinfo
: Información adicional cifrada, como la extensión original del archivo..private.key
: La clave privada RSA..public.key
: La clave pública RSA.
El proyecto depende de las bibliotecas estándar de Java para criptografía. No se requieren dependencias externas adicionales.
El proyecto está organizado en varios paquetes y clases, cada uno con responsabilidades específicas:
CryptoBox
es el componente central del proyecto, encargado de manejar la criptografía de archivos y la gestión de extensiones. Esta clase proporciona métodos para encriptar y desencriptar archivos, así como para gestionar las extensiones de archivos seguros.
DataFile
es una clase de modelo que representa un archivo con su extensión correspondiente. Se utiliza para manejar y almacenar información sobre archivos cifrados y descifrados.
Utils
proporciona métodos de utilidad para diversas operaciones del sistema, como listar archivos en un directorio, obtener la extensión de un archivo, limpiar la consola, pausar la ejecución para esperar una entrada del usuario, y mostrar animaciones en la consola. También incluye métodos para leer y editar archivos de texto, y convertir archivos cifrados a su extensión original.
Si deseas contribuir a este proyecto, puedes hacer un fork del repositorio y enviar un pull request con tus mejoras.
Este proyecto fue desarrollado para demostrar la implementación de un sistema de cifrado híbrido en Java, utilizando las bibliotecas de criptografía estándar. Cualquier mejora o sugerencia es bienvenida.