我正在尝试使用pyOpenSSL和Python 3.4.2来验证签名。这是我的代码。
from OpenSSL import crypto
some_byte_string = b'This is a byte string.'
crt = crypto.load_certificate(crypto.FILETYPE_PEM, pem)
# self.signature is a base64 encoded string
crypto.verify(crt, self.signature, some_byte_string, 'sha1')
产生以下异常:
verify_result = _lib.EVP_VerifyFinal(md_ctx, signature, len(signature), pkey)
TypeError: initializer for ctype 'unsigned char *' must be a bytes or list or tuple, not str
我也尝试过为'some_byte_string'使用常规字符串,但是当我尝试使用以下字符串时,出现以下异常:
_lib.EVP_VerifyUpdate(md_ctx, data, len(data))
TypeError: initializer for ctype 'void *' must be a cdata pointer, not str
我看到了以前的SO问题,引用了unittest for pyOpenSSL verify,这似乎是我在做什么,尽管显然有问题。
编辑:
忘记提及我正在使用的pyOpenSSL版本是pyOpenSSL-0.14-py3.4。
最佳答案
显然,这是一个0.14的错误,并将在0.15中修复。
https://github.com/pyca/pyopenssl/issues/15
关于digital-signature - 使用Python 3进行pyOpenSSL签名验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28749543/