【问题标题】:Python RSA Decryption Using OpenSSL Generated Keys使用 OpenSSL 生成的密钥进行 Python RSA 解密
【发布时间】:2009-07-16 19:00:44
【问题描述】:

有谁知道使用 Python 库导入 OpenSSL RSA 私钥/公钥(使用密码)并使用它来解密消息的最简单方法。

我查看了 ezPyCrypto,但似乎无法让它识别 OpenSSL RSA 密钥,我尝试使用 importKey 导入密钥,如下所示:

key.importKey(myKey, passphrase='PASSPHRASE')

myKey 在我的例子中是一个 OpenSSL RSA 公钥/私钥对,表示为一个字符串。

这与:

未绑定的方法 importKey() 必须首先以密钥实例调用 参数(取而代之的是 str 实例)

API 文档说:

importKey(self, keystring, **kwds)

有人可以建议我在使用 ezPyCrypto 时如何读取密钥吗?我也试过:

key(key, passphrase='PASSPHRASE')

但这不符合:

ezPyCrypto.CryptoKeyError:已尝试 导入无效密钥或密码 不好

这里的文档链接:

http://www.freenet.org.nz/ezPyCrypto/detail/index.html

编辑:只是对此的更新。成功导入了 RSA 密钥,但由于 eqPyCrypto 不支持 AES 分组密码,因此在解密时遇到了真正的问题。只是让人们知道。我成功地使用 ncrypt (http://tachyon.in/ncrypt/) 完成了我想做的事情。由于 SWIG 和 OpenSSL 编译问题,我在使用 M2Crypto 时遇到了一些编译问题,尽管安装的版本超过了最低要求。目前看来,Python 加密/解密框架有点像雷区。呵呵,谢谢你的帮助。

【问题讨论】:

    标签: python openssl rsa encryption


    【解决方案1】:

    第一个错误告诉您需要在key实例上调用importKey

    k = key()
    k.importKey(myKey, passphrase='PASSPHRASE')
    

    但是,文档似乎表明这是做你想做的更好的方法:

    k = key(keyobj=myKey, passphrase='PASSPHRASE')
    

    【讨论】:

    • 好吧,这解决了我的密钥的导入问题。至于解密部分,我假设我使用 k.decString(someString) 来解密密钥...感谢您的帮助
    【解决方案2】:

    目前尚不清楚您要实现什么目标,但您可以尝试一下 M2Crypto。在我看来,它是可用于 Python 的最佳 OpenSSL 包装器。

    这是一个示例 RSA 加密/解密代码:

    import M2Crypto as m2c
    import textwrap
    key = m2c.RSA.load_key('key.pem', lambda prompt: 'mypassword')
    
    # encrypt something:
    data = 'testing 123'
    encrypted = key.public_encrypt(data, m2c.RSA.pkcs1_padding)
    print "Encrypted data:"
    print "\n".join(textwrap.wrap(' '.join(['%02x' % ord(b) for b in encrypted ])))
    
    # and now decrypt it:
    decrypted = key.private_decrypt(encrypted, m2c.RSA.pkcs1_padding)
    print "Decrypted data:"
    print decrypted
    print data == decrypted
    

    【讨论】:

    • 我想要实现的目标非常清楚:“使用 Python 库导入 OpenSSL RSA 私钥/公钥(使用密码)并使用它来解密消息。”
    • 好吧,上面的例子就是这样做的。然而,普通的 RSA 加密很少单独使用。通常你有一些对称密钥加密算法用于加密数据流,而 RSA 用于加密对称密钥。因此,如果您想找到最佳解决方案,您可能应该描述您的更大问题。
    最近更新 更多