【问题标题】:Open RSA File and encrypt message with Python 3打开 RSA 文件并使用 Python 3 加密消息
【发布时间】:2019-09-04 18:07:38
【问题描述】:

我正在处理这个问题几天,但我不明白。我已经用谷歌搜索并尝试了这里指出的几种解决方案,但没有成功。我想用openssl生成的公钥加密消息(字符串)。

我正在使用这些命令生成密钥:

# Private key:
openssl genrsa -out private_key.pem 2048

# Public key:
openssl rsa -in private_key.pem -outform PEM -pubout -out public_key.pem 

我想要完成的是打开公钥并用这个sn-p加密数据:

from Crypto.PublicKey import RSA

# Open RSA file
with open("public_key.pem", "r") as fk:
    rsa_key = RSA.importKey(fk.read())

message_encrypted = rsa_key.encrypt("Hello.", <X>)

我不明白我要在&lt;X&gt; 写什么。但是当我写一些整数值时,它会因为这个错误而失败:

self = <Crypto.PublicKey._slowmath._RSAKey object at 0x7fcb153de748>, m = 'HELLO'

    def _encrypt(self, m):
        # compute m**d (mod n)
>       return pow(m, self.e, self.n)
E       TypeError: unsupported operand type(s) for pow(): 'str', 'int', 'int'

最好的问候!

【问题讨论】:

  • 您使用的是 Pycrypto 还是 Pycryptodome?因为在 Pycrypto 中,K 被忽略 (ref) 并且在 Pycryptodome 中 .encrypt() 引发 NotImplementedError 异常。因此,使用 Pycrypto,您应该能够使用任何 int 作为 K 的方法,而使用 Pycryptodome,您根本不能使用该方法。
  • 从追溯看来,._encrypt() 在某个时候被调用了。该方法期望m 是一个数字,但在这种情况下它是一个字符串,因此为了使用它,您应该将消息转换为一个数字。但是,此方法执行原始加密,最好避免使用它并改用OAEP。
  • @t.m.adam,我不打算使用那个参数,所以我不知道在 处写什么。
  • 您可以将任何字符串或 int 作为 ,无论如何都会被忽略。导致异常的是m 参数(消息)。
  • 你是在告诉我这是图书馆的问题吗?

标签: python encryption openssl


【解决方案1】:

多亏了 cmets,我才得以解决这个问题,我所问的并非完全是在课堂上,而是使用了 site 中解释的另一个等价物。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2011-03-01
    • 2023-01-19
    • 2020-08-05
    • 2011-09-12
    • 2012-11-10
    相关资源
    最近更新 更多