【问题标题】:How to export and then import the keys to decryption?如何导出然后导入密钥进行解密?
【发布时间】:2021-06-24 14:12:01
【问题描述】:
我正在尝试在 python 中使用 RSA 模块来加密和解密字符串。在文档中它说您可以使用导入密钥
with open('private.pem', mode='rb') as privatefile:
keydata = privatefile.read()
privkey = rsa.PrivateKey.load_pkcs1(keydata)
但是我们如何导出新生成的密钥呢?
另外,我应该在哪里保存私钥和公钥?我应该将它保存在不同的数据库中并从那里导入吗?
【问题讨论】:
标签:
python
encryption
cryptography
rsa
【解决方案1】:
您已经实施了导入。对于导出,您可以简单地使用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 和 here。