如何在 pyCryptodome (Python 3.7) 中使用 public 密钥解密

How to decrypt with public key in pyCryptodome (Python 3.7)

我知道这个问题已经被问过无数次了,但是要么其他人问的不够清楚,要么这根本不可能(虽然没有人这么说),反正没有人给出明确的答案(也许是代码) .所以:我正在尝试构建一种加密货币,但这纯粹是为了好玩,所以我不需要它是超级安全的,我希望使用 RSA 来验证用户的真实性,我用私钥加密交易消息,并且然后我将消息与加密版本一起发送,然后当我需要验证时,我要求 public 密钥并解密。现在问题来了: 显然它需要私钥来解密(我显然不能拥有),而从数学上讲,没有私钥这将完美运行。有没有办法解决?类似但不是 RSA 的东西也可以。

我找到了一种高效且更安全的方法,下面是代码(直接取自 PKCS1_v1_5 文档): 以下示例显示了如何使用 RSA 私钥(从文件加载)来计算消息的签名:

>>> from Crypto.Signature import pkcs1_15
>>> from Crypto.Hash import SHA256
>>> from Crypto.PublicKey import RSA
>>>
>>> message = 'To be signed'
>>> key = RSA.import_key(open('private_key.der').read())
>>> h = SHA256.new(message)
>>> signature = pkcs1_15.new(key).sign(h)

在另一端,接收方可以使用匹配的 public RSA 密钥来验证签名(以及消息的真实性):

>>> key = RSA.import_key(open('public_key.der').read())
>>> h = SHA.new(message)
>>> try:
>>>     pkcs1_15.new(key).verify(h, signature)
>>>     print "The signature is valid."
>>> except (ValueError, TypeError):
>>>    print "The signature is not valid."

希望这会有所帮助,如果不是这里是页面本身的 link:https://pycryptodome.readthedocs.io/en/latest/src/signature/pkcs1_v1_5.html