Python RSA — Шифрование С открытым Ключом Выдает Ошибку?

#python #json #encryption #rsa

Вопрос:

Я пытаюсь зашифровать данные JSON с помощью открытого ключа RSA и расшифровать с помощью закрытого ключа мой код,

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

final_data = { 'custom_folder': {'check': 'test'} }

data = json.dumps(final_data).encode('utf-8') # converted into bytes

keys = RSA.generate(2048)
pub_key = keys.publickey().exportKey('PEM') # generates public key
pri_key = keys.exportKey('PEM') # generate private key

encryptor = PKCS1_OAEP.new(key=keys) # using keys variable
encrypted = encryptor.encrypt(data)
print("Encrypted:", binascii.hexlify(encrypted))
 

Когда вы используете переменную keys , она шифрует данные следующим образом,

 Encrypted: b'46bdca64f486....'
 

Но я хочу использовать свой открытый ключ для шифрования и отправки данных, а на другом конце расшифровать, используя только закрытый ключ, когда я заменяю keys его на pub_key генерирует эту ошибку

 encryptor = PKCS1_OAEP.new(key=pub_key) # replaced keys with public key

# Error geenrated
Traceback (most recent call last):
  encrypted = encryptor.encrypt(data)
  modBits = Crypto.Util.number.size(self._key.n)
AttributeError: 'bytes' object has no attribute 'n'
 

Как зашифровать только с помощью открытого ключа?

Комментарии:

1. Вы должны подать заявку в PKCS1_OAEP.new() любом keys.publickey() или RSA.importKey(pub_key) , где pub_key находится открытый ключ, закодированный PEM, как в вашем примере.

2. Откомандирован. Открытый ключ RSA состоит из модуля и показателя степени. То, что вы предоставляете API, — это кодировка открытого ключа, а не сам объект открытого ключа.

3. Понял, я знал, что когда открывал новую функцию, параметр действительно говорил «ключевой объект», но не мог найти, как преобразовать его в объект.