【问题标题】: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

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

    关于保护密钥的问题:私钥必须保密。这不是那么容易。有很多关于如何做到这一点的帖子,例如herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多