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)
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)
Crypto
, puede instalarlo usando el comando pip install pycrypto
.