2011-02-01 2 views
1

私は最近、PyCryptoにGoogle Chromeのパッキングプロセスによって生成されたPEMを認識させる方法を見つけようとしています。問題は、標準のimportKeyメソッドがエラーを引き起こすことです。かなり長いプロセスの後、私は最終的に、DerSequence.decodeメソッド(すべての詳細here)をリバースエンジニアリングすることによってインポートを最初にシミュレートできることに気付きました。残念ながら、それは解決されていない1つの問題で私を残します。GoogleのPEMにChrome拡張機能を梱包するのに40の文字が残っているのはなぜですか?

インポートするキーを取得できますが、それはかなり一貫しているように見えますが、残った文字は40文字です。

import binascii 

# read the pem file into chromepem 
# the first and last lines are useless, 
# we need it to be a string, not a tuple 
# and it needs to be one string with no newlines. 
chromepem = ''.join(open("chrome.pem","r").readlines()[1:-1]).replace("\n","") 

# not sure why, but it looks like the first 40 characters aren't necessary. 
# removing them seems to create a consistent public key anyway... 
pem = binascii.a2b_base64(chromepem[40:]) 

誰もが40文字ある理由を知っていますか?それらを無視すると、一部のプライベート/公開鍵のペアで問題が発生するのでしょうか?

+0

あなたは単純に 'RSA.ImportKey()'を使ってみましたか? 1行目と最後の行で何かする必要があります。すべてを読み込んでImportKeyに渡してください。 –

+0

しました。キーが不適切にフォーマットされていることがわかります。私は自分が20時間の欲求不満を救ってくれることを実感できました。 – cwallenpoole

+0

ハ、私はあなたを信じていますが、私は尋ねなければなりませんでした。 1つの問題は、PEMは実際には特定のフォーマットではなく、バイナリBLOBを取り、base64でエンコードし、BEGINおよびENDラインで囲む一般的なフォーマットです。おそらくImportKeyはある種類のバイナリBLOBを必要とし、あなたのPEMファイルは他の種類です。このような状況では、PKCS8、PKCS12、およびopenssl独自の3つの共通の秘密鍵形式があります。おそらく後日、私はGoogle Chromeソフトウェアを試してみて、それがどれであるか、そしてどのPyCrypto RSAが探しているかを調べることができます。 –

答えて

2

今のところ最も簡単なことは、openssl rsa utiityを使用してchrome.pemファイルをchrome.derファイルに変換することです。何かのように

openssl rsa -in chrome.pem -out chrome.der -outform DER 

トリックを行う必要があります。これで、RSA.importKey()メソッドで直接chrome.derのバイトを使用できます。

+0

これは実際にbashスクリプトが行うことです(それは一貫して動作します)。私は純粋なPythonの実装を望んでいた。 – cwallenpoole

+0

完全に合理的な、私はまだ何かを把握するかもしれません。 pycryptoのものは少し書いてあり、APIはかなり不完全に見えます。 –

+0

(これはドキュメント上で非常に概要です...) – cwallenpoole

関連する問題