#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. Понял, я знал, что когда открывал новую функцию, параметр действительно говорил «ключевой объект», но не мог найти, как преобразовать его в объект.