2016-08-23 2 views
0

Я работаю с классом 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 объект?

+0

Вы бы сериализовать ключи, которые находятся за такого объекта. PyCrypto предоставляет вам функции для экспорта ключей и их импорта. Вы пробовали их? –

+0

@ArtjomB. Я попробую, но я надеялся, что сможет сериализовать шифр в один файл. Вы предлагаете мне просто сериализовать ключ (используя экспорт PyCrypto, а не разборку), а затем восстановить шифр, импортировав его? – bkaiser

ответ

0

Сортировка отлично подходит для компонента открытого ключа, но когда дело доходит до всего ключа, _randfunc не выдерживает травления. Я столкнулся с той же ошибкой при работе над проектом. ожно больше информации здесь: https://github.com/google/oauth2client/issues/638

использования делают функций importKey и exportKey PyCrypto, чья документация можно найти здесь: https://www.dlitz.net/software/pycrypto/api/2.6/