Сохранение ключей RSA в файл с использованием pycrypto

Im, использующий 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.

Кто-нибудь сделал это раньше?

Ответы

Ответ 1

keys.exportKey() для закрытого ключа keys.publickey().exportKey() для открытого ключа. Вы можете изменить формат вывода с помощью аргумента format, см. docs на этом сайте.

Ответ 2

Следующий фрагмент кода создаст пару ключей RSA и сохранит их в файлах PEM, а также распечатает их.

Оригинальные кредиты: wRAR из этого поста и AJ poultier из [ pyOpenSSL, создающие файл pem

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)