【问题标题】:import rsa private key and encrypt string导入 rsa 私钥并加密字符串
【发布时间】:2020-12-07 22:03:30
【问题描述】:

尝试导入使用 openssl 创建的 2048 位 RSA 私钥并使用它来加密字符串。关注这个https://cryptobook.nakov.com/asymmetric-key-ciphers/rsa-encrypt-decrypt-examples

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

pr_key = RSA.import_key(open('my_priv_key.pem', 'r').read())

msg = "blah"

encryptor = PKCS1_OAEP.new(pr_key)

encrypted = encryptor.encrypt(msg)
print(encrypted)

错误:

» python encrypt.py
Traceback (most recent call last):
  File "encrypt", line 10, in <module>
    encrypted = encryptor.encrypt(msg)
  File "/python/lib/python3.7/site-packages/Crypto/Cipher/PKCS1_OAEP.py", line 121, in encrypt
    db = lHash + ps + b'\x01' + _copy_bytes(None, None, message)
TypeError: can't concat str to bytes

【问题讨论】:

  • 这应该可以工作msg = b"blah"
  • 同样的错误

标签: python encryption rsa


【解决方案1】:

这是因为 encrypt 方法需要字节作为参数。使用msg = b'blah' 应该可以解决问题,并将加密调用更改为encrypted = encryptor.encrypt(msg.encode('utf-8'))

【讨论】:

  • 你是如何生成这个my_priv_key.pem的?
  • 通过 openssl 例如openssl genrsa -out mykey.pem 2048
  • 这很有趣,因为我得到了它的工作。检查this example
  • 嗯,你的代码对我不起作用(python 3.7.3)......很奇怪。
  • 是的,它也可以使用 docker 与 python 3.7.3 一起使用。您使用的pycryptodome 的版本是什么? pycryptodome==3.9.8这里
猜你喜欢
  • 2018-01-13
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
相关资源
最近更新 更多