如何导出然后导入密钥进行解密?

How to export and then import the keys to decryption?

我正在尝试使用 python 中的 RSA 模块来加密和解密字符串。在文档中它说您可以使用

导入密钥
with open('private.pem', mode='rb') as privatefile:
    keydata = privatefile.read()
privkey = rsa.PrivateKey.load_pkcs1(keydata)

但是我们如何导出新生成的密钥呢? 另外,我应该在哪里保存私钥和 public 密钥?我应该将它保存在不同的数据库中并从那里导入吗?

您已经实施了导入。对于导出,您可以简单地使用 save_pkcs1(),例如

import rsa

(pubkey, privkey) = rsa.newkeys(512) # 512 only for testing purposes, otherwise at least 2048

# PEM (default)
print(privkey.save_pkcs1().decode('utf-8'))
print(pubkey.save_pkcs1().decode('utf-8'))

# DER
print(privkey.save_pkcs1('DER').hex())
print(pubkey.save_pkcs1('DER').hex())

例如以下输出:

-----BEGIN RSA PRIVATE KEY-----
MIIBPQIBAAJBAJ4hEw3nvXbdK4OAEMeGZ3+jb37GChxkzCaqoFtrexiIl70Nq5Dc
oxqEqxDpXGkkK5WNa5qzimVwKKbiSChEyIsCAwEAAQJAGp7kz015Jv6a6btwl7Z3
zBQenBAI+bi6abQF5P4WDTuKlgt6K1YaFDpdIbp4gmiqFmdhyUvyd3aylHprERv9
WQIjAML4S/aqlQS/06DFOy9UOHMgoXv/P6I9uCHJbd6Rr0dLlHUCHwDPoJZE60Po
As0ae7fNXzIX5quYMM60Kcg42QXvSP8CIwChWxiTFe2qNo+QeGpY6xykuxaqJj6l
qOqgm7GgB3XGTViZAh4Bv7CEVBb2VU+08WXS7QJXATJgzchv7AorsGhEY7ECIwCy
zqoZ402jQJ0l0lIXAIzqSApotwz3Rpr0DT87hNIU8MHg
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PUBLIC KEY-----
MEgCQQCeIRMN57123SuDgBDHhmd/o29+xgocZMwmqqBba3sYiJe9DauQ3KMahKsQ
6VxpJCuVjWuas4plcCim4kgoRMiLAgMBAAE=
-----END RSA PUBLIC KEY-----

3082013d0201000241009e21130de7bd76dd2b838010c786677fa36f7ec60a1c64cc26aaa05b6b7b188897bd0dab90dca31a84ab10e95c69242b958d6b9ab38a657028a6e2482844c88b020301000102401a9ee4cf4d7926fe9ae9bb7097b677cc141e9c1008f9b8ba69b405e4fe160d3b8a960b7a2b561a143a5d21ba788268aa166761c94bf27776b2947a6b111bfd59022300c2f84bf6aa9504bfd3a0c53b2f54387320a17bff3fa23db821c96dde91af474b9475021f00cfa09644eb43e802cd1a7bb7cd5f3217e6ab9830ceb429c838d905ef48ff022300a15b189315edaa368f90786a58eb1ca4bb16aa263ea5a8eaa09bb1a00775c64d5899021e01bfb0845416f6554fb4f165d2ed0257013260cdc86fec0a2bb0684463b1022300b2ceaa19e34da3409d25d25217008cea480a68b70cf7469af40d3f3b84d214f0c1e0
30480241009e21130de7bd76dd2b838010c786677fa36f7ec60a1c64cc26aaa05b6b7b188897bd0dab90dca31a84ab10e95c69242b958d6b9ab38a657028a6e2482844c88b0203010001    

另请参阅源代码中的 tests

如果需要,可以将密钥存储在文件中。

关于您关于保护密钥的问题:私钥必须保密。这并不容易。有很多关于如何做到这一点的帖子,例如here and here.