我使用这种方法:
来自OpenSSL import crypto
cert = crypto.load_certificate(crypto.FILETYPE_PEM, open('pubkey.pem', 'rt').read())
crypto.verify(cert, sign_code, data, 'sha1)
但是,当我加载证书时,它显示错误:
Traceback (most recent call last):
File "alipay.py", line 77, in <module>
qrpay = Qrpay()
File "alipay.py", line 32, in __init__
self.cert = crypto.load_certificate(crypto.FILETYPE_PEM, '123')
File "/usr/local/lib/python3.5/dist-packages/OpenSSL/crypto.py", line 1647, in load_certificate
_raise_current_error()
File "/usr/local/lib/python3.5/dist-packages/OpenSSL/_util.py", line 48, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.crypto.Error: [('PEM routines', 'PEM_read_bio', 'no start line')]
但是,如果我加载公钥,则表示成功:
crypto.load_publickey(crypto.FILETYPE_PEM, open('pubkey.pem', 'rt').read())
我做错了什么?
或者是否有其他方法可以进行验证?
答案 0 :(得分:0)
希望我的发现可以帮助仍在寻找答案的人们。问题出在文件 pubkey.pem 中。即使在很多情况下公钥与证书相同,文件的格式也不同。
要使用方法 load_certificate ,文件必须以-----BEGIN CERTIFICATE-----
要使用 load_publickey ,文件必须以-----BEGIN PUBLIC KEY-----