在Windows x64上导入Python中的M2Crypto时出错

时间:2015-11-15 13:14:33

标签: python import openssl runtime-error m2crypto

我正在尝试在Windows 64位上使用M2Crypto库。我正在使用64位版本的Python,我从源代码编译M2Crypto,链接到Openssl 1.0.2d。这个编译很成功,我通过运行python setup.py install安装了包。

当我从命令行运行Python并输入import M2Crypto时,它可以正常工作。接下来,我试图通过创建椭圆曲线键来使用库:

from M2Crypto import EC
kp = EC.gen_params(EC.NID_sect233k1)
kp.gen_key()
kp.save_key("test.key", None)

这会出现以下错误:

OPENSSL_Uplink(00007ABCAFE839000,08): no OPENSSL_Applink

我不确定如何处理此错误。我认为这个问题与Openssl有关。互联网上的一些消息来源写道我应该重新编译Python,但我不知道该怎么做。我想知道是否有更简单的方法来修复此错误,因为我不想重新编译我的Python发行版。

此问题仅发生在Windows上。我在OS X或Linux上安装M2Crypto没有问题。

1 个答案:

答案 0 :(得分:1)

我无法使用自己安装的Python和M2Crypto重现您的问题。但是,我已经看到no OPENSSL_Applink在Windows上发生,openssl/applink.c未包含并编译到应用程序中,随后使用BIO写入文件或stdin }或stdout

因此,您可以尝试使用内存BIO,然后从内存BIO中读取并将内容写入Python本身的文件中,如下所示:

>>> from M2Crypto import EC
>>> kp = EC.gen_params(EC.NID_sect233k1)
>>> kp.gen_key()
>>> from M2Crypto import BIO
>>> membuf = BIO.MemoryBuffer()
>>> kp.save_key_bio(membuf, None)
1
>>> with open('test2.key', 'w') as f:
...     f.write(membuf.read())
...

这不是一个真正的解决方案,只是一种解决方法。