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

Error when importing M2Crypto in Python on Windows x64

我正在尝试在 Windows 64 位上使用 M2Crypto 库。我使用的是 Python 的 64 位版本,并且我从源代码编译了 M2Crypto,链接到 Openssl 1.0.2d。这次编译成功,我已经通过 运行ning 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 没有问题

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

因此,您可以尝试使用内存 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())
...

这不是真正的修复,只是一种解决方法。