2010-10-04 52 views
3

確定首先是的我已經搜索谷歌和計算器,並做了一些閱讀(超過4小時只是在這個坐着)還沒有找到我需要這些原因:Python非對稱加密:使用預先生成的prv/pub keys

  • 他們中的許多建議剛剛推出像gpg.exe一個exe(http://stackoverflow.com/questions/1020320)

  • 一些使用PyCrypto或其他圖書館和看着他們建議,無論是)我找不到如何使用它們的任何API,b)我找不到如何導入預先存在的prv/pub密鑰或者c)他們使用不安全的RandomPool(並且我嘗試了t o更新它只是要求麻煩)

  • 有些人提及它,但我無法找到他們在哪裏鏈接(或他們根本就沒有鏈接。

所以我知道問你的同胞計算器用戶我怎麼能做到這一點,採取了公開密鑰的字符串(或路徑(我可能只是把它寫到一個臨時文件,(我打算只把它當作一個字符串pub_key =「...」)))並用它來簽名和保護一個字符串(將發佈在論壇上(JSON用於更新我的應用程序)?

另外這些是RSA密鑰(Putty Gen 4096位SSH-2-RSA)使用PuttyGen生成(可以採用任何格式(OpenSSH,ssh)。COM,PPK)

這是公鑰看起來像

---- BEGIN SSH2 PUBLIC KEY ----

評論: 「RSA的密鑰-20101003」

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

---- END SSH2 PUBLIC KEY ----

不是 - >密鑰格式似乎是PKCS1所以M2Crypto是不行的(其負載的關鍵功能預計PEM)

最新的閱讀中,我認爲這是SSH公共密鑰文件格式(RFC:http://www.ietf.org/rfc/rfc4716.txt

我也覺得它下面的錯誤,我不認爲它處理SSH公共密鑰文件格式:(

也像扭曲的情況下可能是我應該看看

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

而且爲什麼SO不允許我立即發佈賞金?

+0

什麼,特別是爲u不想使用外部可執行文件來完成繁重的工作? – 2010-10-04 01:24:59

+0

另外,你對哪些特定的加密算法感興趣? RSA,DSA,GPG,ECC? – 2010-10-04 01:31:27

+0

跨平臺消失了,這是我的這個應用程序的主要目標之一。 RSA – Zimm3r 2010-10-04 01:31:36

回答

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) 
0

我能想到的至少兩個相對簡單的選項

  1. 使用OpenSSL(或pyOpenSSL)到BER轉換爲PEM
  2. 使用的paramiko,扭曲或任何其他Python SSH實現的鑰匙工作直接
+0

我試着扭曲它與私鑰的工作,但它引發公鑰的BadKeyError。 – Zimm3r 2010-10-04 05:55:09

+0

其實,如果你有私鑰,你總是可以生成公鑰... – Kimvais 2010-10-04 09:51:06

+0

那麼應用程序將公共字符串嵌入字符串(與文件格式相同),但不是私鑰 – Zimm3r 2010-10-04 13:27:36