Soluciones de Seguridad de Datos en C++ y Python

Cifrado con Llave RSA en Python

El cifrado con llave RSA es un método de cifrado asimétrico que utiliza una llave pública para cifrar y una llave privada para descifrar. A continuación se muestra un ejemplo de cifrado con llave RSA en Python:

Cifrado

# Librerías de Crypto
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Abre el archivo que contiene la llave pública y la carga
def cargar_llave_rsa(file_path):
    with open(file_path, 'rb') as file:
        key = RSA.import_key(file.read())
    return key

# Lee el archivo y cifra el contenido con la llave pública
def cifrar_archivo_rsa(archivo_path, llave_publica_path, output_path):
    with open(archivo_path, 'rb') as file:
        archivo_data = file.read()

    llave_publica = cargar_llave_rsa(llave_publica_path)
    cifrador = PKCS1_OAEP.new(llave_publica)
    archivo_cifrada = cifrador.encrypt(archivo_data)

    with open(output_path, 'wb') as file:
        file.write(archivo_cifrada)

# Ruta de archivo a cifrar
mensaje_path = 'mensaje.txt'

# Ruta para crear archivo cifradox
llave_publica_path = '../llaves/llave_publica_diego.pem'

# Ruta para crear archivo cifrado
output_path = 'archivo_cifrado.bin'

cifrar_archivo_rsa(mensaje_path, llave_publica_path, output_path)

Resultado

Al cifrar un archivo con la llave pública, se debe generar un archivo.bin cuyo contenido no puede ser interpretado.

Descifrado

# Librerías de Crypto
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Abre el archivo que contiene la llave pública y la carga
def cargar_llave_rsa(file_path):
    with open(file_path, 'rb') as file:
        key = RSA.import_key(file.read())
    return key

# Lee el archivo cifrado y descifra el contenido con la llave privada
def desencriptar_archivo_rsa(archivo_cifrada_path, llave_privada_path, output_path):
    with open(archivo_cifrada_path, 'rb') as file:
        archivo_cifrada = file.read()

    llave_privada = cargar_llave_rsa(llave_privada_path)
    descifrador = PKCS1_OAEP.new(llave_privada)
    archivo_descifrada = descifrador.decrypt(archivo_cifrada)

    with open(output_path, 'wb') as file:
        file.write(archivo_descifrada)

# Ruta de archivo cifrado
archivo_cifrada_path = 'menseje_cifrada.bin'

# Ruta de llave privada
llave_privada_path = '../llaves/llave_privada.pem'

# Ruta para crear archivo descifrado
output_path = 'archivo_descifrada.txt'

desencriptar_archivo_rsa(archivo_cifrada_path, llave_privada_path, output_path)

Resultado

Al cifrar con una llave pública y descifrar con una privada se debe recuperar el contenido original del archivo.

archivo_descifrado.txt:
Mensaje descifrado