使用PyCrypto解密带有RSA公钥的消息

ali*_*izx 5 python rsa public-key-encryption pycrypto

我想用RSA公钥解密一条消息,PyCrypto我正在使用下面的代码,但是no private key在下面的代码中应该改变错误?

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
import base64
licence_key="bla bla"
licence_key_in_bytes=licence_key.encode("utf-8")
encrypted=base64.b16decode(licence_key_in_bytes)
key = open("public_key", "r").read() 
rsakey = RSA.importKey(key)
rsakey = PKCS1_OAEP.new(rsakey)
decrypted_message= rsakey.decrypt(encrypted)
Run Code Online (Sandbox Code Playgroud)

Maa*_*wes 3

加密(提供机密性)

  • 如果您想在同一个应用程序中加密/解密,那么您只需交换公钥和私钥即可。
  • 加密始终由公钥执行,解密由私钥执行。
  • 如果反之亦然,RSA 就没有任何安全性。
  • 如果您知道私钥,那么攻击者很容易猜到具有较小公共指数的公钥。

签名生成(提供真实性和完整性)

  • 然而,从代码来看,您似乎想要对消息进行签名,但您使用的是专门为加密而设计的算法(RSA OAEP)。
  • 不幸的是,这两个概念并不兼容。首先,OAEP的填充机制与签名机制不兼容。

此外,在处理密钥方面可能存在差异

  • 该库将以不同于公钥操作的方式处理私钥操作。- - 私钥需要安全性,例如防止侧信道攻击。
  • 请注意,公钥允许比私钥更大的值范围(公共指数可能很小或很大,私有指数应始终接近密钥大小)。

因此,私钥的组成部分将始终与公钥的组成部分相匹配。但由于公钥通常具有较小的公共指数,因此公钥可能并不总是被接受为私钥。

  • 唯一好的解决方案是用正确的签名操作替换您自己的签名操作。- - 幸运的是,Python 可以处理 PSS 签名操作,请查看此处的文档,其中包含示例代码。