- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 OpenSSL 生成 key ,提供来自标准输入的密码:
openssl genpkey -algorithm RSA -out private-key.pem -outform PEM -pass stdin -des3 -pkeyopt rsa_keygen_bits:4096
key 看起来像:
-----BEGIN ENCRYPTED PRIVATE KEY-----
XXX...
-----END ENCRYPTED PRIVATE KEY-----
我的 Python 代码如下所示:
from Crypto.PublicKey import RSA
# ...
f = open('private-key.pem', 'r')
r = RSA.importKey(f.read(), passphrase='some-pass')
f. đóng()
但我遇到了一个异常(exception):
File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 665, in importKey
return self._importKeyDER(der)
File "/usr/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 588, in _importKeyDER
raise ValueError("RSA key format is not supported")
ValueError: RSA key format is not supported
怎么了?
是否可以生成一个加密的 RSA key ,将其存储在一个文件中,然后在 PyCrypto 中使用它?可以用 OpenSSL 来做吗?支持哪些格式?
导入公钥工作正常,但未加密。
câu trả lời hay nhất
假设#1
看了源码,我想,我解开了谜团。导入使用密码加密的 PEM key 的工作方式是 PEM 被解密为 DER,然后调用 importKeyDER 函数。如果提供的密码不正确,生成的 DER 表示格式也将不正确,您将得到您提供的异常。为了确认这一点,我在下面运行了两个快速测试:
>>> from Crypto.PublicKey import RSA
>>> f = open('/private-key.pem','r')
>>> r=RSA.importKey(f.read(),passphrase='foo')
Theo dõi (cuộc gọi gần đây nhất là cuộc gọi cuối cùng):
Tệp "", dòng 1, trong
File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 665, in importKey
return self._importKeyDER(der)
File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 588, in _importKeyDER
raise ValueError("RSA key format is not supported")
ValueError: RSA key format is not supported
>>> f = open('/private-key.pem','r')
>>> r=RSA.importKey(f.read(),passphrase='')
>>> r
<_RSAobj @0xb7237b2c n(4096),e,d,p,q,u,private>
在收到作者的 PEM 后,我意识到假设 #1 对他的案例无效。我仍然想将它保留在这里作为导入失败的一个可能原因,以便其他用户知道。
假设 #2 - 这是作者的情况。
RSA.py 在 PEM 文件中查找以下内容以确定对 PEM 应用了哪种加密:
Proc-Type: 4,ENCRYPTED
当使用“openssl genrsa ...”命令生成 key 时,此字符串以明文形式存在于 PEM 中,但是当使用“opensl genpkey ...”时,“Proc-Type”不存在。
如果找不到“Proc-Type”,RSA.py 甚至不会尝试解密 PEM:
# The encrypted PEM format
if lines[1].startswith(b('Proc-Type:4,ENCRYPTED')):
DEK = lines[2].split(b(':'))
....
因此,我此时的结论是 PyCrypto v 2.6.1 不支持“openssl genpkey”生成的 key 。
重要更新
它在 PyCrypto 的最新版本 2.7a1 中确实有效。你可以从这里下载它:http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.7a1.tar.gz
>>> f = open('key.pem','r')
>>> r = RSA.importKey(f.read(), passphrase='123456')
>>> r
<_RSAobj @0xb6f342ec n(2048),e,d,p,q,u,private>
关于python - 如何在 PyCrypto 中使用加密的 RSA 私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23848849/
有人可以帮助我吗?本指导剂量工作: PyCrypto on python 3.5 命令行: creating build\temp.win32-3.6\Release\src C:\Program
我正在尝试在 CryptoJS 上解密并在 PyCrypto 上加密。 我看到 this 一个很好的答案,就像魅力一样,唯一的问题是它调整 PyCrypto 以与 CryptoJS 一起工作,我更喜欢
我需要 pycrypto 因为它需要使用 dnspython 库的一些函数。我在网上发现一些帖子暗示 pycrypto 已死。但是,我需要 dnspython 并且别无选择,只能使用它。我什至尝试安装
我正在使用 PKCS1_OAEP 加密算法来加密文件。文件加密成功,但无法解密文件,报错“Ciphertext with incorrect length”。 加密算法在这里: #!/usr/bin/
我试图让 2 个程序使用公钥在网络上共享加密数据,但我遇到了一个难题:共享的信息( key 和/或加密数据)似乎被修改了。我希望保持加密数据格式和 key 格式尽可能简单,以便与其他语言兼容。为了解决
如何将 pycrypto 与 GAP 结合使用? 它说 here它不支持最新版本。这是否意味着我必须使用他们指出的版本? 我试过了,但是,当我执行 setup.py 时我收到错误 src/MD2.c:
ValueError: invalid version number '2.20.51.20100613' 我在安装 pycrypto 时遇到问题。尝试过包管理器:pip & easy_install
仍然不能让它正常工作。我的问题是关于如何使解密线工作。这是我写的: class IVCounter(object): @staticmethod def incrIV(self):
我从 JS RSA 库 (http://www-cs-students.stanford.edu/~tjw/jsbn/) 加密纯文本并从 python Crypto.PublicKey 解密。 但是,
我在使用 PyCrypto 时遇到了重大问题,如下面的代码所示。一个问题是测试用例不会以可重复的方式失败,而是在使用不同 key 的不同平台上有不同的原因。 请注意,测试用例为 Alice 和 Bob
我已经使用 pycrypto 生成了公钥和私钥,并使用导出 key 将它们保存到一个文件中: from Crypto.PublicKey import RSA bits=2048 new_key =
我试图了解 PyCrypto 如何在项目中使用,但我没有完全理解初始化向量 (IV) 的重要性。我发现在解码字符串时我可以使用错误的 IV,而且除了前 16 个字节( block 大小)之外,我似乎仍
我正计划在一个项目中使用 PyCrypto,我想知道 PyCrypto 是否足够安全可靠,可以使用。如何确保 PyCrypto 根据 RSA 和 AES 等各种加密算法正确加密数据? 最佳答案 视情况
我尝试使用 pip 在 python 3.6.0 上安装 pysnmp(使用 pycrypto),但出现错误: Command ""c:\program files (x86)\python36-32
我使用 pycrypt 库编写了一些代码,我一定做错了什么,但我不知道我做错了什么。我(几乎)可以用错误的初始化向量解密消息,即使我相信我正在遵循他们的示例。 from Crypto.Cipher i
我在 web.py 中构建应用程序,但在将加密数据存储在 MySQL 中时遇到了一些问题。 PyCrypto 创建的密码文本看起来像:'\x06\x7f\x81\xa0\xf4d\x00H\xef\x
我正在使用 Pycryptodome(一个 PyCrypto 分支)来创建 AES-GCM 密文。我使用以下 Python 代码进行加密: cek = os.urandom(16) nonce = o
我正在尝试了解用于公钥和私钥的 pyCrypto 加密和解密方法,但我看到了一些奇怪的东西。假设我有一组私钥和公钥,存储在文件 dummy_private.txt 和 dummy_public.txt
我正在尝试对哈希执行盲化和非盲化。 以下: https://gdata-python-client.googlecode.com/hg/pydocs/gdata.Crypto.PublicKey.RS
创建了一个带套接字的客户端-服务器应用程序,我正在尝试将签名从客户端传输到服务器。我将它从元组转换为字符串,然后再转换回元组。但签名停止工作。如何解决? from Crypto.Hash import
Tôi là một lập trình viên xuất sắc, rất giỏi!