gpt4 book ai didi

python 使用有效负载和公钥字符串验证数字签名

转载 作者:行者123 更新时间:2023-11-28 19:07:46 25 4
gpt4 key购买 nike

我有一段数据 [ '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"

最佳答案

问题中的代码有几个错误,按出现顺序排列:

  • 导入了两种不同的 SHA512 实现;
  • 有效负载显然不是 base 64 编码的,普通的 base 64 不代表文本,也不包含 _ 个字符(但是 base-64-url 包含);
  • 甚至没有使用signature_algorithmkeytype 变量;
  • key 不应被散列以实现正常的 PSS 签名方案;
  • 忽略m.hexdigest()的结果;
  • 不能通过SHA512.new(rsakey)生成签名生成类;

如前所述,您的代码甚至无法编译,因为 SHA512 类无法签名;

关于python 使用有效负载和公钥字符串验证数字签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44912790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com