我尝试在提交之前向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
。在
目前没有回答
相关问题 更多 >
编程相关推荐