我得到了ValueError(“无法反序列化关键数据”)。如果我使用load_pem_private_key from cryptography.hazmat.primitives.serialization
要添加更多的上下文:
我的钥匙是从
-----BEGIN OPENSSH PRIVATE KEY-----
引发此错误的代码段。
key = serialization.load_pem_private_key(data=private_key.encode(),
password=None,
backend=default_backend())
错误的跟踪显示
Backend=default_backend() ->在load_pem_private_key ->密码中返回backend.load_pem_private_key(数据、密码),在_load_key中返回load_pem_private_key -> self._handle_key_loading_error()
发布于 2019-11-26 05:38:03
pyca/加密主要使用OpenSSL,而主要支持OpenSSL支持的格式不包括OpenSSH的“新”格式。但是,它确实添加了OpenSSH公钥格式,因此询问他们添加OpenSSH私有信息并不荒谬。在此期间..。
如果您有OpenSSH,您可以使用ssh-keygen
将OpenSSH的“新”格式转换回OpenSSH的“旧”格式,即OpenSSL的“传统”或“遗留”格式,方法是声称您希望更改密码--即使您将新密码与旧密码相同,或者由于您显然想要一个未加密的文件,就像旧密码一样使新密码为空:
# OpenSSH 7.8 up
ssh-keygen -f keyfile -p -m pem
# below 7.8
ssh-keygen -f keyfile -p # NOT -o
或者,如果启动了PuTTY 0.69,puttygen也可以这样做,尽管UI在Windows和Unix之间有所不同。
杜普斯:
由ssh-keygen生成的SSH密钥不能被Paramiko识别:“非有效的RSA私钥文件”。 (Paramiko是Python中的SSH )
使用JSch时“无效私钥” (Java,但问题相同)
发布于 2021-10-28 17:33:03
从密码学版本3.0 (发布的2020-07-20 )开始,您现在可以使用函数加载存储在OPENSSH PRIVATE KEY
PEM格式中的SSH私钥:
$ ssh-keygen -t ed25519 -f demo_keypair -N 'example-passphrase' -C ''
$ python -c '
from cryptography.hazmat.primitives.serialization import load_ssh_private_key
from hashlib import sha1
key = load_ssh_private_key(open("demo_keypair", "rb").read(), b"example-passphrase")
print(sha1(key.sign(b"demo data")).hexdigest())
'
df551fcad0a0e288f0f92ca9e4876eb57a483c27
请注意,要加载受密码保护的密钥,必须安装模块 (版本3.1.5或更高版本);不幸的是,文档没有明确说明这一点,但是如果没有安装bcrypt
,您得到的错误消息相当清楚:
cryptography.exceptions.UnsupportedAlgorithm: Need bcrypt module
您可以使用额外的ssh
将bcrypt
作为依赖项拉进来:
pip install cryptography[ssh]
https://stackoverflow.com/questions/59029092
复制相似问题