首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python库而不使用ssh- Ed25519 -p来解密密钥私钥

使用python库而不使用ssh- Ed25519 -p来解密密钥私钥
EN

Stack Overflow用户
提问于 2021-02-15 21:57:01
回答 1查看 419关注 0票数 1

我有私钥,例如生成RSA密钥对:

代码语言:javascript
运行
复制
ssh-keygen -t rsa -N 123456 -f /tmp/rsa

我可以替换调用:

代码语言:javascript
运行
复制
ssh-keygen -p -P 123456 -N "" -f /tmp/rsa

使用python加密模块:

代码语言:javascript
运行
复制
from cryptography.hazmat.backends import default_backend
import cryptography.hazmat.primitives.serialization as crypto_serialization


priv_key = crypto_serialization.load_pem_private_key(open(key_path, "rb").read(),
                                                     passphrase.encode('utf-8'),
                                                     default_backend()
                                                     )
with open(key_path, "wb") as dest_pem:
    dest_pem.write(priv_key.private_bytes(crypto_serialization.Encoding.PEM,
                                          crypto_serialization.PrivateFormat.TraditionalOpenSSL,
                                          crypto_serialization.NoEncryption()
                                         )
                   )

但是当我用参数-t ed25519生成密钥时,我得到了错误:

代码语言:javascript
运行
复制
  File "/usr/local/lib64/python3.6/site-packages/cryptography/hazmat/primitives/serialization/base.py", line 16, in load_pem_private_key
    return backend.load_pem_private_key(data, password)
  File "/usr/local/lib64/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1089, in load_pem_private_key
    password,
  File "/usr/local/lib64/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1315, in _load_key
    self._handle_key_loading_error()
  File "/usr/local/lib64/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1373, in _handle_key_loading_error
    raise ValueError("Could not deserialize key data.")
ValueError: Could not deserialize key data.

我使用python paramiko模块加载Ed25519私钥,但是我不能序列化私有字节:

代码语言:javascript
运行
复制
import paramiko
key_priv = paramiko.Ed25519Key.from_private_key_file('ed25519', password=b'123456')
EN

Stack Overflow用户

发布于 2021-02-19 14:40:26

生成密钥对:

代码语言:javascript
运行
复制
ssh-keygen -t ed25519 -N 123456 -f ed25519

使用load_ssh_private_key方法,我尝试解密私钥:

代码语言:javascript
运行
复制
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend

priv_key = serialization.load_ssh_private_key(open('ed25519', 'rb').read(), b'123456', default_backend())

with open('ed25519_py', wb') as dest_key:
    dest_key.write(priv_key.private_bytes(serialization.Encoding.PEM,
                                          serialization.PrivateFormat.OpenSSH,
                                          serialization.NoEncryption()
                                         )
                   )

没有发生错误,我得到了未加密的openssh格式的私钥文件。

另一方面,使用ssk-keygen工具,我将私钥文件的密码短语更改为空:

代码语言:javascript
运行
复制
ssh-keygen -p -P 123456 -N "" -f ed25519

因此,我有两个解密的密钥,与不匹配的

如何使用python获取与ssh-keygen调用结果匹配的密钥?

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66209372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档