Python 如何获得RSA数字签名的原始哈希输入?

Python 如何获得RSA数字签名的原始哈希输入?,python,rsa,digital-signature,Python,Rsa,Digital Signature,我收到一个网络数据包,其最后64个字节(128个十六进制字符)是数据包SHA-256哈希的RSA-512数字签名。我获取这个数据包的一个截断版本(除了最后64个字节之外的所有内容),然后自己计算散列,这很好,但是我需要一种方法来获取最初生成签名的散列 我曾尝试用Python实现这一点,但遇到了一些问题,因为我没有RSA私钥,只有公钥和数字签名。我需要的是一种获取公钥和签名的方法,并从中获取SHA-256散列,将其与我生成的散列进行比较。有办法做到这一点吗?任何加密库都可以。我正在使用hashli

我收到一个网络数据包,其最后64个字节(128个十六进制字符)是数据包SHA-256哈希的RSA-512数字签名。我获取这个数据包的一个截断版本(除了最后64个字节之外的所有内容),然后自己计算散列,这很好,但是我需要一种方法来获取最初生成签名的散列


我曾尝试用Python实现这一点,但遇到了一些问题,因为我没有RSA私钥,只有公钥和数字签名。我需要的是一种获取公钥和签名的方法,并从中获取SHA-256散列,将其与我生成的散列进行比较。有办法做到这一点吗?任何加密库都可以。我正在使用hashlib生成散列

原始散列是用私钥签名的。要获取原始散列,您需要使用公钥而不是私钥解密签名。

原始散列是使用私钥签名的。要获得原始散列,您需要使用公钥而不是私钥对签名进行解密。

我认为您应该阅读以下内容:我看到了-我不明白的是它说您可以:您可以使用公钥对签名进行“加密”(或“解密”,与“教科书”RSA中的相同)并获得散列消息。如果哈希消息等于哈希消息,则验证消息是否正确签名。这是否意味着只需对签名进行RSA加密,然后对其进行散列,这将为您提供与散列“消息”相同的信息?更具体地说,这是本线程答案中解释的过程:我正在寻找如何使用python加密库来实现这一点。到目前为止,我还不知道当你说“我需要的是一种方法,获取公钥和签名,并从中获取SHA-256哈希值,将其与我生成的哈希值进行比较。”你可以通过“解密”反签名并将反签名结果与反原始数据进行比较来实现这一点,你已经拥有了这些数据,如果您解密的内容与数据匹配,那么您可以确定数据来自私钥持有者,这就是全部想法。以签名jwt的工作方式为例,标题告诉您它是如何签名的,正文是数据,最后一部分是您使用公钥验证的签名。我想你应该读一下:我看到了-我不明白的是它说你可以:你可以使用公钥“加密”(或“解密”,这在“教科书”RSA中是相同的)签名并得到散列消息。如果哈希消息等于哈希消息,则验证消息是否正确签名。这是否意味着只需对签名进行RSA加密,然后对其进行散列,这将为您提供与散列“消息”相同的信息?更具体地说,这是本线程答案中解释的过程:我正在寻找如何使用python加密库来实现这一点。到目前为止,我还不知道当你说“我需要的是一种方法,获取公钥和签名,并从中获取SHA-256哈希值,将其与我生成的哈希值进行比较。”你可以通过“解密”反签名并将反签名结果与反原始数据进行比较来实现这一点,你已经拥有了这些数据,如果您解密的内容与数据匹配,那么您可以确定数据来自私钥持有者,这就是全部想法。以签名jwt的工作方式为例,标题告诉您它是如何签名的,正文是数据,最后一部分是您使用公钥验证的签名。我的问题是如何在python中实现这一点——我知道需要使用公钥解密。它只是简单的rsa_pub_key.decrypt(数字签名)吗?我试过这样做,但我得到了一个错误:
文件/usr/local/lib/python2.7/site packages/Crypto/PublicKey/RSA.py”,第239行,在_decryptmp=self.key中。现在,它仍然说“我遇到了问题,因为我没有RSA私钥”。如果要验证签名,则根本不解密,库中有用于签名的额外代码,请参阅,并在年底前切换到Python 3。。。我的问题是如何在python中实现这一点——我知道需要使用公钥解密。它只是简单的rsa_pub_key.decrypt(数字签名)吗?我试过这样做,但我得到了一个错误:
文件/usr/local/lib/python2.7/site packages/Crypto/PublicKey/RSA.py”,第239行,在_decryptmp=self.key中。现在,它仍然说“我遇到了问题,因为我没有RSA私钥”。如果要验证签名,则根本不解密,库中有用于签名的额外代码,请参阅,并在年底前切换到Python 3。。。