3

好的,首先是的,我已经搜索了 google 和 stackoverflow 并做了一些阅读(仅在本次会议中超过 4 小时)没有找到我需要的内容,原因如下:

  • 他们中的许多人建议只启动像 gpg.exe 这样的 exe (http://stackoverflow.com/questions/1020320)

  • 有些人建议使用 PyCrypto 或其他库并查看它们,要么 a) 我找不到如何使用他们的任何 API,b) 我找不到如何导入预先存在的 prv/pub 密钥或 c) 他们使用不安全的 RandomPool (我试图更新它只是自找麻烦)

  • 有些人顺便提到它,但我找不到他们链接到的内容(或者他们根本没有链接。

所以我知道问你们stackoverflow用户我该怎么做,取一个公钥字符串(或路径(我可以把它写到一个临时文件中,(我打算把它作为一个字符串pub_key =“.. ." ) ) ) 并使用它来签署和保护字符串(将发布在论坛上(用于更新我的应用程序的 JSON)?

这些也是使用 PuttyGen 生成的 RSA 密钥(Putty Gen 4096 位 SSH-2-RSA)(可以是任何格式(OpenSSH、ssh.com、ppk)

这就是公钥的样子

---- 开始 SSH2 公钥 ----

评论:“rsa-key-20101003”

AAAAB3NzaC1yc2EAAAABJQAAAgEAi + 91fFsxZ7k1UuudSe5gZoavwARUyZScCtdf WQ0ROoJC + XIqW5vVJfgmr + A1jLS5m4wNsrCqeyoX2B22T6iEwqVXrXt3QcbccKMu WkLKFK1h67q6Coc + 3eOTmKrOuZbWc19YQgybdkR / GxF7XAbq4NCGNaCDtMOqX8Q2 L / a9fAYqVdTwg9trpcz3whNmdLk / B0edOABKuVX51UdLV + ZggK503 + uAb1JiIIj0 mARwR / HNo4oRLMLf2PjuZsGVYYjJDdVJBU6AN4PUQSRRRPL4 + YmsrLJb / TpfJeXA vj4KZMNJv15YXz7 / iMZMKznDtr2RJX5wbSpuTUBNZveA7YiIHxvvvis38b / lX9SJ SYPfZ9CeQY6MvQgG2zwDTOOvKgOIB4sTGMXfcoxB8AF / QXOcxWFJkZoj36rvMd9n Po6szLjHXwcEUOUvvQfG4VvdQA0H5gGLHqYL1EehRsgi5qcCoFPaZW2K09ErKcS0 MbrLFjBkQ9KmqAM38bvM8UhCWAMA9VXOGHMxUHBV4Bir9alGS4VX0B8Y0b3dZ + 7I MKkHMCwdEUJf7QVdGxGuSQtVsq8RZbIpk3g7wtv8f6I / iEC58ekdrH35tq5 + 1ilW dkk9 + rrhUy4qrZ + HFi7AeemybpiumbSnebvnkMaIPAOo23V8C9BQ0iuxx4gIZf10 o+TPSK8=

---- 结束 SSH2 公钥 ----

不是这个 --> 密钥格式似乎是 PKCS1,所以 M2Crypto 将不起作用(它的加载密钥功能需要 PEM)

最新阅读我认为是 SSH 公钥文件格式(RFC:http ://www.ietf.org/rfc/rfc4716.txt )

我也认为下面是错误的,我认为它不能处理 SSH 公钥文件格式 :(

看起来 Twisted 可能是我应该看的地方

http://www.java2s.com/Open-Source/Python/Network/Twisted/Twisted-1.0.3/Twisted-1.0.3/twisted/conch/ssh/keys.py.htm

另外为什么不允许我立即发布赏金?

4

2 回答 2

2

好的,我找到了如何加载它

from twisted.conch.ssh import keys as Keys
import base64

public_key = """\
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20101003"
AAAAB3NzaC1yc2EAAAABJQAAAgEAi+91fFsxZ7k1UuudSe5gZoavwARUyZScCtdf
WQ0ROoJC+XIqW5vVJfgmr+A1jLS5m4wNsrCqeyoX2B22T6iEwqVXrXt3QcbccKMu
WkLKFK1h67q6Coc+3eOTmKrOuZbWc19YQgybdkR/GxF7XAbq4NCGNaCDtMOqX8Q2
L/a9fAYqVdTwg9trpcz3whNmdLk/B0edOABKuVX51UdLV+ZggK503+uAb1JiIIj0
mARwR/HNo4oRLMLf2PjuZsGVYYjJDdVJBU6AN4PUQSRRRPL4+YmsrLJb/TpfJeXA
vj4KZMNJv15YXz7/iMZMKznDtr2RJX5wbSpuTUBNZveA7YiIHxvvvis38b/lX9SJ
SYPfZ9CeQY6MvQgG2zwDTOOvKgOIB4sTGMXfcoxB8AF/QXOcxWFJkZoj36rvMd9n
Po6szLjHXwcEUOUvvQfG4VvdQA0H5gGLHqYL1EehRsgi5qcCoFPaZW2K09ErKcS0
MbrLFjBkQ9KmqAM38bvM8UhCWAMA9VXOGHMxUHBV4Bir9alGS4VX0B8Y0b3dZ+7I
MKkHMCwdEUJf7QVdGxGuSQtVsq8RZbIpk3g7wtv8f6I/iEC58ekdrH35tq5+1ilW
dkk9+rrhUy4qrZ+HFi7AeemybpiumbSnebvnkMaIPAOo23V8C9BQ0iuxx4gIZf10
o+TPSK8=
---- END SSH2 PUBLIC KEY ----"""

key_data = ''.join(public_key.splitlines()[2:-1])# remove begin, end tags and comment
blob = base64.decodestring(key_data)
key = Keys.Key._fromString_BLOB(blob)
于 2010-10-04T18:17:58.050 回答
0

我能想到至少两个相对简单的选择

  1. 使用 OpenSSL(或 pyOpenSSL)将 BER 转换为 PEM
  2. 使用 paramiko、twisted 或任何其他 python SSH 实现直接使用密钥
于 2010-10-04T05:30:37.640 回答