用RSA公钥和PyCryp解密消息

2024-04-29 00:15:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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)

Tags: key代码infromimportbyteslicencecrypto
1条回答
网友
1楼 · 发布于 2024-04-29 00:15:04

加密(提供机密性)

  • 如果您想在同一个应用程序中加密/解密,那么您应该简单地交换公钥和私钥。
  • 加密总是由公钥执行,解密则由私钥执行。
  • RSA没有任何安全性,如果你这样做的话。
  • 如果您知道私钥,那么攻击者很容易猜到具有较小公共指数的公钥。

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

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

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

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

因此,私钥的组件将始终与公钥的组件匹配。但是,由于公钥通常有一个小的公共指数,公钥可能并不总是被接受为私钥。

  • 唯一好的解决方案是用正确的签名操作替换您自己的签名操作。---幸运的是,Python处理PSS签名操作,看看documentation here,它很有帮助地包含了示例代码。

相关问题 更多 >