m2验证符号时的加密分段错误

2024-04-20 00:31:22 发布

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

我尝试在提交之前向json请求添加一个sign字段,并在响应中验证它。我要做的是在初始化时加载一次密钥对,然后(根据this gist)在我的类中使用以下方法:

import M2Crypto

class MyRequestHandler:

    SIGN_PRIVATE = M2Crypto.EVP.load_key('/path/to/signing/key')
    SIGN_PUBLIC = M2Crypto.RSA.load_pub_key('/path/to/verification/key')

    def __init__(self):
        pass

    # signing
    @classmethod
    def sign(cls, data):
        cls.SIGN_PRIVATE.sign_init()
        cls.SIGN_PRIVATE.sign_update(data)
        signed_data = cls.SIGN_PRIVATE.sign_final()
        signed_data_base64 = signed_data.encode('base64')
        return signed_data_base64

    # verifying
    @classmethod
    def verify(cls, response):
        signature = response['sign'].decode('base64')
        data = response['data']
        verify_evp = M2Crypto.EVP.PKey()
        verify_evp.assign_rsa(cls.SIGN_PUBLIC)
        verify_evp.verify_init()
        verify_evp.verify_update(data)
        return verify_evp.verify_final(signature) == 1

问题是verify调用一次可以正常工作,但是再次调用它会导致分段错误,无论数据和签名是什么。为什么会这样?一般说来,我做这个过程是正确的吗?在

编辑:要使用从签名中使用的私钥提取的公钥在python shell中重现该问题(考虑我们要验证自己的签名):

^{pr2}$

m2加密版本是0.25.1。在


Tags: keydatainitresponsedefprivateclssigned