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