【发布时间】:2019-11-02 17:37:11
【问题描述】:
我收到一个网络数据包,其最后 64 个字节(128 个十六进制字符)是数据包的 SHA-256 哈希的 RSA-512 数字签名。我取了这个数据包的截断版本(除了最后 64 个字节之外的所有内容)并自己计算哈希,这工作正常,但是我需要一种方法来取回首先生成签名的哈希
我尝试在 Python 中执行此操作并遇到问题,因为我没有 RSA 私钥,只有公钥和数字签名。我需要的是一种获取公钥和签名并从中获取 SHA-256 哈希以将其与我生成的哈希进行比较的方法。有没有办法做到这一点?任何加密库都可以。我正在使用 hashlib 生成哈希
【问题讨论】:
-
我认为您应该阅读以下内容:crypto.stackexchange.com/questions/9896/…
-
我看到了 - 我不明白的是它说你可以:你可以使用公钥“加密”(或“解密”,这在“教科书”RSA中相同)签名并获得散列消息。如果散列消息等于散列消息,则您验证了消息已正确签名。这是否意味着只需 RSA 加密签名然后对其进行哈希处理,这将为您提供与哈希后的“消息”相同的信息?
-
更具体地说-该线程的答案中解释的过程:stackoverflow.com/questions/18257185/… 我正在寻找如何使用 python 加密库来做到这一点。到目前为止,我还没有弄清楚如何
-
当您说“我需要的是一种获取公钥和签名并从中获取 SHA-256 哈希以将其与我生成的哈希进行比较的方法。”你通过“解密”去签名并将结果与你已经拥有的原始数据进行比较来做到这一点,如果你解密的内容与数据匹配,那么你可以确定数据来自私钥的持有者,这就是全部主意。以签名 jwt 的工作方式为例,标头告诉您它是如何签名的,主体是数据,最后一部分是您使用公钥验证的签名。
-
这里是python的一个例子。 gist.github.com/lkdocs/6519372.
标签: python rsa digital-signature