Я работаю с классом RSA pyCrpyto в:PyCrypto RSA и Рассол
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
message = 'To be encrypted'
key = RSA.generate(2048)
cipher = PKCS1_v1_5.new(key)
ciphertext = cipher.encrypt(message)
Этот код работает отлично, и я могу расшифровать зашифрованный текст. Тем не менее, мне нужно иметь возможность сериализовать эти шифры. Я не имел никаких проблем pickle
-ную другие шифры PyCrypto, как AES, но когда я пытаюсь pickle
в шифра RSA я бегу в следующее сообщение об ошибке:
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
import pickle
message = 'To be encrypted'
key = RSA.generate(2048)
cipher = PKCS1_v1_5.new(key)
pickle.dump(cipher, open("cipher.temp", "wb"))
cipher = pickle.load(open("cipher.temp", "rb"))
ciphertext = cipher.encrypt(message)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Crypto/Cipher/PKCS1_v1_5.py", line 119, in encrypt
randFunc = self._key._randfunc
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Crypto/PublicKey/RSA.py", line 126, in __getattr__
raise AttributeError("%s object has no %r attribute" % (self.__class__.__name__, attrname,))
AttributeError: _RSAobj object has no '_randfunc' attribute
Что я могу сделать, чтобы обойти эту проблему - еще одна структура сериализации, другой метод построения объекта RSA и т. д., или это просто un-pickle
-able объект?
Вы бы сериализовать ключи, которые находятся за такого объекта. PyCrypto предоставляет вам функции для экспорта ключей и их импорта. Вы пробовали их? –
@ArtjomB. Я попробую, но я надеялся, что сможет сериализовать шифр в один файл. Вы предлагаете мне просто сериализовать ключ (используя экспорт PyCrypto, а не разборку), а затем восстановить шифр, импортировав его? – bkaiser