python - 如何在 pyCryptodome (Python 3.7) 中使用公钥解密
问题描述
我知道这个问题已经被问过无数次了,但是其他人问的不够清楚,或者这根本不可能(尽管没有人这么说),反正没有人给出明确的答案(也许是代码)。所以:我正在尝试构建一种加密货币,但它纯粹是为了好玩,所以我不需要它是超级安全的,我希望使用 RSA 来验证用户的真实性,我用私钥加密交易消息并然后我将消息与加密版本一起发送,然后当我需要验证时,我要求提供公钥并解密。现在问题来了:显然它需要私钥来解密(我显然不能拥有),而从数学上讲,如果没有它,这将完美地工作。有没有办法解决?类似工作但不是 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)
在另一端,接收者可以使用匹配的公共 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."
希望这会有所帮助,如果不是这里是页面本身的链接:https ://pycryptodome.readthedocs.io/en/latest/src/signature/pkcs1_v1_5.html
推荐阅读
- r - 如何使用来自另一个矩阵的非 NA 值以及它们所在的行和列创建一个新矩阵?
- r - 将频率计数添加到 2x2 prop.table
- java - requestWindowFeature(Window.FEATURE_NO_TITLE) 问题
- java - 如何在我的活动中实现“不再显示”功能?
- python - 在 Kubernetes 上创建 HTTPS 端点最简单的方法是什么?
- c++ - 在 GStreamer 管道总线上调用 gst_bus_set_sync_handler 是否安全?
- r - 在R中组合具有相似名称的嵌套列表项
- machine-learning - Keras 中的 RGB 图像是表示为 [R,G,B], [R,G,B], ... 还是表示为 [RR.., GG.., BB..]?
- project-reactor - flatMap vs map,基本解释没问题,但是当我的转换函数本身不同步时会发生什么?
- java - 我可以在 arduino 硬件上运行 java 代码(不使用端口通信)吗?