Cifrado RSA en Python

Muhammad Waiz Khan 30 enero 2023
  1. Cifrado RSA en Python usando cifrado simple
  2. Cifrado RSA en Python usando relleno criptográfico
Cifrado RSA en Python

Este artículo explicará diferentes métodos para cifrar y descifrar datos en Python utilizando el módulo RSA.

El método de criptografía asimétrica utiliza un par de claves (claves públicas y privadas) para una conversación segura entre dos personas. La ventaja de la criptografía asimétrica o de clave pública es que también proporciona un método para garantizar que el mensaje no se altere y sea auténtico.

Podemos usar criptografía asimétrica en Python usando el módulo RSA de las siguientes maneras.

Cifrado RSA en Python usando cifrado simple

Hay dos formas de realizar el cifrado asimétrico utilizando el módulo RSA en Python: el cifrado RSA simple y una forma más adecuada y segura mediante el relleno criptográfico.

En el cifrado RSA simple, podemos generar un par de claves y cifrar los datos utilizando la clave pública. Podemos encriptar los datos usando el método _RSAobj.encrypt() y luego descifrar el mensaje encriptado usando el método _RSAobj.decrypt().

Los métodos _RSAobj.encrypt() y _RSAobj.decrypt() toman una cadena de bytes o una longitud como entrada y realizan el cifrado y descifrado RSA simple en la entrada, respectivamente.

El siguiente código de ejemplo muestra cómo cifrar y descifrar los datos utilizando el cifrado RSA simple en Python.

import Crypto
from Crypto.PublicKey import RSA
import ast

keyPair = RSA.generate(1024)

pubKey = keyPair.publickey()

encryptedMsg = pubKey.encrypt(b"This is my secret msg", 32)
decryptedMsg = keyPair.decrypt(ast.literal_eval(str(encryptedMsg)))

print("Decrypted message:", decryptedMsg)
Nota
En caso de que ocurra algún error al importar el módulo Crypto, puede instalarlo usando el comando pip install pycrypto.

Cifrado RSA en Python usando relleno criptográfico

Podemos realizar el cifrado y descifrado PKCS#1 OAEP utilizando el módulo PKCS1_OAEP de Python. El OAEP es un esquema de relleno de cifrado asimétrico óptimo publicado por RSA y es más seguro que el cifrado RSA simple y primitivo.

Para realizar el esquema OAEP primero tendremos que generar el objeto PKCS1OAEP_Cipher y luego llamar a los métodos PKCS1OAEP_Cipher.encrypt() y PKCS1OAEP_Cipher.decrypt() para cifrar o descifrar el texto usando este esquema. Si el texto de entrada es un tipo de cadena, primero tendremos que convertirlo en una cadena de bytes, ya que el tipo de cadena no es un tipo de entrada válido.

El siguiente código muestra el cifrado OAEP utilizando el módulo PKCS1_OAEP en Python.

from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA

key = RSA.generate(2048)
privateKey = key.exportKey("PEM")
publicKey = key.publickey().exportKey("PEM")

message = "this is a top secret message!"
message = str.encode(message)

RSApublicKey = RSA.importKey(publicKey)
OAEP_cipher = PKCS1_OAEP.new(RSApublicKey)
encryptedMsg = OAEP_cipher.encrypt(message)

print("Encrypted text:", encryptedMsg)

RSAprivateKey = RSA.importKey(privateKey)
OAEP_cipher = PKCS1_OAEP.new(RSAprivateKey)
decryptedMsg = OAEP_cipher.decrypt(encryptedMsg)

print("The original text:", decryptedMsg)
Nota
En caso de que ocurra algún error al importar el módulo Crypto, puede instalarlo usando el comando pip install pycrypto.

Artículo relacionado - Python Encryption