2016-08-23 8 views
0

私はpyCrpytoのRSAクラスで働いています。しかし、私はこれらの暗号をシリアル化できる必要があります。私は、AESのような他のpyCrypto暗号を、-ingあらゆる問題pickleを持っていないが、私は、RSA暗号pickleにしようとしたとき、私は次のようなエラーに遭遇:PyCrypto 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には、キーをエクスポートしてインポートする機能があります。あなたはそれらを試しましたか? @ArtjomB。 –

+0

私はそれを試してみますが、私は暗号を1つのファイルにシリアル化できることを期待していました。あなたは私がちょうど(ピクルではなく、PyCryptoのエクスポートを使用して)キーをシリアル化し、それをインポートして暗号を再構築することを提案していますか? – bkaiser

答えて

0

ピッキングは公開鍵コンポーネントでうまく動作しますが、キー全体では、_randfuncは酸洗いに耐えません。プロジェクトで作業しているときに同じエラーが発生しました。 あなたはここでより多くの情報を細かくすることができます:https://github.com/google/oauth2client/issues/638

をドキュメントここで見つけることができますPyCryptoのimportKeyとexportKey機能を使用してください:https://www.dlitz.net/software/pycrypto/api/2.6/

関連する問題