Python M2Crypto 的椭圆曲线支持

2 投票
3 回答
961 浏览
提问于 2025-04-15 11:31

M2Crypto 是一个支持椭圆曲线(EC)加密的库,可以用来做 ECDSA 和 ECDH。作者安装了 OpenSSL 0.9.8i 这个版本,它支持椭圆曲线加密。但是当他运行 "from M2Crypto import EC,BIO" 这行代码时,出现了一个错误,提示 EC_init() 失败。于是他加了一些调试代码,打印出 m2.OPENSSL_VERSION_TEXT 的值,结果显示为 "OpenSSL 0.9.7 19 Feb 2003"。这个版本的 OpenSSL 是不支持椭圆曲线的。

他尝试了运行 "python setup.py build build_ext --openssl="新路径,指向 OpenSSL 0.9.8i 的安装位置"。虽然 M2Crypto 重新构建了,并且运行了 "Python setup.py install",但他仍然发现它指向的是 "旧版本的 OpenSSL"。

如果有人能提供一些建议,帮助他成功让 M2Crypto 使用 0.9.8i 版本,那将会非常有用。

3 个回答

0

请在这个链接提交一个问题报告:https://gitlab.com/m2crypto/m2crypto/issues/new。在报告中,请提供你的操作系统、Python版本、系统中所有OpenSSL库的位置和版本、编译器的版本。同时,请附上完整的命令python setup.py clean build install的输出信息,包括正常输出和错误信息。谢谢!

0

可能是因为它在查找共享库文件 libssl.so 和 libcrypto.so,结果找到了旧版本的文件,这些文件在 /usr/lib 目录下。如果你把新的路径添加到 /etc/ld.so.conf 文件的最上面,这样系统就会先去这个新路径找文件,这样就能正常工作了。不过,这样做可能会影响其他依赖旧版本 OpenSSL 的应用程序。

2

一些Linux发行版,比如Fedora和Redhat,由于专利问题,禁用了EC。

如果你自己编译OpenSSL,除了--openssl之外,你可能还需要为build_ext指定一些选项,比如--library-dirs和--include-dirs。举个例子,可以看看Chandler里的m2crypto Makefile。另外,M2Crypto的常见问题解答里也有相关的答案。

撰写回答