【问题标题】:How to sign data with encrypted RSA private key (AES-256-CBC) in python如何在 python 中使用加密的 RSA 私钥(AES-256-CBC)对数据进行签名
【发布时间】:2019-05-26 11:57:32
【问题描述】:

private_key的部分例子(这个变量是一个字符串):

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,hidden_text..

lots_of_hidden_text..

-----END RSA PRIVATE KEY-----

当我尝试执行以下操作时:

from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
rsakey = RSA.importKey(private_key, passphrase=privkey_secret_string)
signer = PKCS1_v1_5.new(rsakey)
signature = signer.sign(data)

我在 importKey 上遇到值错误:

Error: ValueError: Unsupport PEM encryption algorithm.

我可以看到 RSA.importKey 不支持 AES-256-CBC,但我找不到任何方法来导入此私钥。

我见过的创建 AES 签名者的唯一解决方案是:

signer = AES.new(privkey_secret_string, AES.MODE_CBC, IV=iv)

但这不使用私钥

【问题讨论】:

标签: python aes rsa pycrypto


【解决方案1】:

在导入密钥之前,您可以切换到 PyCryptodome 或通过系统调用 openssl 来解密密钥:

echo PASSPHRASE | openssl rsa -in key.pem

【讨论】:

  • openssl 可能会工作,有没有办法在没有系统调用的情况下在 python 中做到这一点? PyCryptodome 也不支持 AES-256-CBC
  • 安装pyopenssl并尝试import OpenSSL; OpenSSL.crypto.load_privatekey(OpenSSL.crypto.FILETYPE_PEM, open('privkey.pem', 'r').read(), passphrase=b'foobar')
猜你喜欢
  • 2022-07-08
  • 2014-01-13
  • 2023-03-08
  • 2012-07-15
  • 2021-05-11
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多