首页 > 解决方案 > 如何在python中使用公钥验证私钥

问题描述

我想知道如何使用公钥来验证私钥。

我完全不知道我在做什么

我得到了一个公钥,格式为:

" <RSAKeyValue><Modulus>tuRctbsnB4OSsR7gqNy1ovYZ4vDTn543o4ldX8Wthfjk7dAQKPHQYUmB7EyC4qFQ2GY3/Q+mDjJBDCWbsb8gyFuyU3L93UJ/7szvO+2A/t520srjCN4Yv7HirgpAI0LaWlo1UUUixMU2+kYNv/kBeVUL47TvOIpm0JqstQVDHhJtNMwcbY+3Q0nN4D1jNkSrQitCF3Sdms1kwsIFcdHcUh3WcUBkIefcB97DZKVY915IFbhf1/xdpPBa/E0WjNgtF5q4FI5ClH2CxsDwy2mL6qzZMvRPNWUhaFKlX+CcGvFQOtuJ4K8PZ0P3Wsq55ccxafZp3BQrEcBbto5Cll/E0Q==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"

这是一个字符串,我正在尝试使用 python 验证私钥(也作为字符串提供)。我知道发行人和受众需要是什么,但我不确定如何处理所有这些信息。

我看过一些人使用各种包的例子,但我似乎无法弄清楚 pub_key、private_key 和消息是什么类型......请帮助我......我想学习

标签: pythoncryptographyrsapycrypto

解决方案


Base 64 从 XML 中解码公钥的组件 - 模数和公共指数 - 并从解码的无符号大端数字值创建公钥。

然后使用私钥在任何数据上创建签名,并使用相同的 RSA 签名算法(例如带有 PKCS#1 v1.5 填充的 RSA)使用公钥对其进行验证。如果它验证,则密钥形成密钥对。


好的,因为一个用户似乎一直在苦苦挣扎,让我们实际提供一些代码供您使用(使用 Python3 使用 来创建整数from_bytes):

#!/bin/python
from Crypto.PublicKey import RSA
from xml.dom import minidom
from base64 import b64decode

document = """\
<RSAKeyValue>
  <Modulus>tuRctbsnB4OSsR7gqNy1ovYZ4vDTn543o4ldX8Wthfjk7dAQKPHQYUmB7EyC4qFQ2GY3/Q+mDjJBDCWbsb8gyFuyU3L93UJ/7szvO+2A/t520srjCN4Yv7HirgpAI0LaWlo1UUUixMU2+kYNv/kBeVUL47TvOIpm0JqstQVDHhJtNMwcbY+3Q0nN4D1jNkSrQitCF3Sdms1kwsIFcdHcUh3WcUBkIefcB97DZKVY915IFbhf1/xdpPBa/E0WjNgtF5q4FI5ClH2CxsDwy2mL6qzZMvRPNWUhaFKlX+CcGvFQOtuJ4K8PZ0P3Wsq55ccxafZp3BQrEcBbto5Cll/E0Q==</Modulus>
  <Exponent>AQAB</Exponent>
</RSAKeyValue>
"""

xmldoc = minidom.parseString(document)

modulusB64 = xmldoc.getElementsByTagName('Modulus')[0].firstChild.data
modulusBin = b64decode(modulusB64)
modulus = int.from_bytes(modulusBin, 'big', signed=False)

exponentB64 = xmldoc.getElementsByTagName('Exponent')[0].firstChild.data 
exponentBin = b64decode(exponentB64)
exponent = int.from_bytes(exponentBin, 'big', signed=False) 

public_key = RSA.construct((modulus, exponent))

不幸的是,我没有要验证的签名(或要解密的私钥),所以我无法帮助您验证公钥是否属于私钥。我想应该有代码示例显示基本的签名验证或使用公钥加密。请注意,模数也应该是唯一的,并且存在于 RSA 的两个密钥中,但这仅有助于识别密钥对中的密钥,而不是验证。

请注意,我不是专业的 Python 程序员,所以我正在做的事情可能有捷径;随时编辑它们。


推荐阅读