我正在尝试在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没有问题。
我无法用我自己安装的Python和M2Crypto来重现您的问题。然而,当openssl/applink.c
未包含并编译到应用程序中时,以及随后使用BIO
写入文件或stdin
或stdout
时,我在Windows上看到了no OPENSSL_Applink
。
因此,您可以尝试使用内存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())
...
这不是一个真正的解决方案,只是一个变通方法。