python使ssl崩溃

2024-05-23 14:51:35 发布

您现在位置:Python中文网/ 问答频道 /正文

以下脚本导致我的笔记本电脑出现分段错误:

import ctypes
from bitcoin.core.key import NID_secp256k1
ssl = ctypes.cdll.LoadLibrary(ctypes.util.find_library ('ssl') or 'libeay32')
ssl.i2o_ECPublicKey(ssl.EC_KEY_new_by_curve_name(NID_secp256k1), 0)

这段代码来自python bitcoinlib(https://github.com/petertodd/python-bitcoinlib)。 我还没有打开项目本身的票证,因为崩溃来自于libcrypto.so.1.0.0。在

我用的是Ubuntu 14.04,libcrypto.so.1.0.0,python 3.4。我也尝试过Python2,结果和我预期的一样。在

谢谢你的帮助。在


Tags: keyfromcoreimport脚本ssl错误ctypes
2条回答

Windows上的这些库遇到问题。最终使用了python-bitcoinrpc库。那一款开箱即用。在

以下是i2o_ECPublicKey()的OpenSSL文档。这些文档是为C程序员编写的,但是它们仍然包含了对Python程序员有用的信息(但是我承认,如果你知道C:),它会有所帮助。在

正如这些文档所述,i2o_ECPublicKey()的第二个参数应该是指向输出缓冲区的指针;如果您将NULL作为第二个参数传递给i2o_ECPublicKey(),它只返回输出缓冲区所需的字节数;您应该保存该返回值,以便可以使用正确大小的正确初始化缓冲区重新调用i2o_ECPublicKey。要使用Python ctypes传递NULL,您需要使用None。我怀疑将0传递给一个需要指针的lib函数可能会混淆事情,从而导致灾难性的结果。在

所以用这个代替上面的代码:

import ctypes
from bitcoin.core.key import NID_secp256k1
ssl = ctypes.cdll.LoadLibrary('/usr/lib/x86_64-linux-gnu/libssl.so')
eckey = ssl.EC_KEY_new_by_curve_name(NID_secp256k1)
keysize = ssl.i2o_ECPublicKey(eckey, None)

看看这能不能避免segfault。如果有效,可以使用create_string_buffer(keysize)初始化实际的输出缓冲区。在

相关问题 更多 >