web-dev-qa-db-ja.com

pycryptoを使用して、RSAキーをファイルに保存する

PyCrypto 2.3を使用していますが、生成したキーをファイルに保存して、クライアントとサーバーに配布したいと思います。キーを正しく印刷する方法が見つからないようです。また、インターネットで例を見つけることもできません。

_    def resetKeys(self):
        keys = RSA.generate(1024)

        privHandle = open(self.privateKeyFile, 'wb')
        privHandle.write(keys.privatekey())
        privHandle.close()

        pubHandle = open(self.publicKeyFile, 'wb')
        pubHandle.write(keys.publickey())
        pubHandle.close()
_

このコードは多くの理由で機能しません。まず、keys.publickey()は印刷できないようで、次のように返されます。

_    <_RSAobj @0x10f810d0 n(1024),e>
_

次に、keysにはprivatekeyという名前の関数がありません。

誰かが以前にそれをしたことがありますか?

15
qdii

秘密鍵の場合はkeys.exportKey()、公開鍵の場合はkeys.publickey().exportKey()format引数を使用して出力形式を変更できます。 このサイトのドキュメント を参照してください。

31
wRAR

次のコードは、RSAキーペアを作成し、それらをPEMファイルに保存し、印刷します。

元のクレジット:この投稿のwRARと[ pyOpenSSLがpemファイルを作成)からのA​​J poultier

from Crypto.PublicKey import RSA
private_key = RSA.generate(1024)
public_key = private_key.publickey()
print(private_key.exportKey(format='PEM'))
print(public_key.exportKey(format='PEM'))

with open ("private.pem", "w") as prv_file:
    print("{}".format(private_key.exportKey()), file=prv_file)

with open ("public.pem", "w") as pub_file:
    print("{}".format(public_key.exportKey()), file=pub_file)
3
KARAN SHAH