作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一段数据 [ 'payload' ] 是 Base64 编码的。然后我有一个包含有效负载签名的“签名”。我有一个公钥。签名算法为SHA512withRSA
如何在 Python 中验证数据的真实性?我正在使用以下代码进行检查,但它似乎不起作用
import base64
import hashlib
from Crypto.PublicKey import RSA
from Crypto.Signature import SHA512
from Crypto.Hash import SHA512
from base64 import b64decode
# Public Key
key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEpFwIarbm48m6ueG+jhpt2vCGaqXZlwR/HPuL4zH1DQ/eWFbgQtVnrta8QhQz3ywLnbX6s7aecxUzzNJsTtS8VxKAYll4E1lJUqrNdWt8CU+TaUQuFm8vzLoPiYKEXl4bX5rzMQUMqA228gWuYmRFQnpduQTgnYIMO8XVUQXl5wIDAQAB"
# Base64 Encoded payload
payload = "some_string_payload"
decoded_payload = base64.b64decode(payload)
signature = "gw5K+WvO43673XBinZOmwgrZ3ttVuZ17/7SBnzqAAD4pgiwzYbZuEwn2lev6FW01f6TL0d9cNH4WtT53bQnTlhLQOZi4mHTTtM64O7MNljSA5zjJTUl77wXK/cJM+/G6R4YgYAnjydXAZjbMKY4Z9kV0qz2spdnS7Je7Q8I1xaU="
signature_algorithm = "SHA512withRSA"
keytype = "RSA"
m = hashlib.sha512()
m.update( key )
m.update( decoded_payload )
print m
m.hexdigest()
print m
keyDER = b64decode(key)
rsakey = RSA.importKey(keyDER)
signer = SHA512.new(rsakey)
if signer.verify(m, b64decode(signature)):
print "Verified"
else:
print "Not Verified"
最佳答案
问题中的代码有几个错误,按出现顺序排列:
signature_algorithm
和keytype
变量;key
不应被散列以实现正常的 PSS 签名方案;m.hexdigest()
的结果;SHA512.new(rsakey)
生成签名生成类;如前所述,您的代码甚至无法编译,因为 SHA512 类无法签名;
关于python 使用有效负载和公钥字符串验证数字签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44912790/
我是一名优秀的程序员,十分优秀!