我正在尝试使用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/

10-10 23:55