gpt4 book ai didi

python使ssl崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 05:55:52 25 4
gpt4 key购买 nike

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

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 的 i2o_ECPublicKey 外部函数。

我使用的是 Ubuntu 14.04、libcrypto.so.1.0.0、python 3.4。我也尝试过使用 python 2,结果与我预期的完全相同。

感谢您的帮助。

最佳答案

这是 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)

看看是否可以避免段错误。如果可行,您可以使用 create_string_buffer(keysize)初始化实际的输出缓冲区。

关于python使ssl崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27885193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com