【问题标题】:Python Asymmetric Encryption: Using pre-generated prv/pub keysPython 非对称加密:使用预先生成的 prv/pub 密钥
【发布时间】:2011-04-20 14:42:57
【问题描述】:

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

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

  • 有些人建议使用 PyCrypto 或其他库并查看它们,要么 a) 我找不到如何使用他们的任何 API,b) 我找不到如何导入预先存在的 prv/ pub key 或 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

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

【问题讨论】:

  • 使用外部可执行文件来完成繁重的工作有什么特别不希望的?
  • 另外,你对加密的什么特别感兴趣? RSA、DSA、GPG、ECC?
  • 跨平台消失了,这是我使用这个应用程序的主要目标之一。 RSA

标签: python cryptography encryption-asymmetric


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

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

    1. 使用 OpenSSL(或 pyOpenSSL)将 BER 转换为 PEM
    2. 使用 paramiko、twisted 或任何其他 python SSH 实现直接使用密钥

    【讨论】:

    • 我尝试过扭曲它与私钥一起使用,但它会为公钥引发 BadKeyError。
    • 那么应用程序会将公共字符串嵌入到字符串中(与文件格式相同),而不是私钥
    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2011-02-13
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多