私は最近、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文字ある理由を知っていますか?それらを無視すると、一部のプライベート/公開鍵のペアで問題が発生するのでしょうか?
あなたは単純に 'RSA.ImportKey()'を使ってみましたか? 1行目と最後の行で何かする必要があります。すべてを読み込んでImportKeyに渡してください。 –
しました。キーが不適切にフォーマットされていることがわかります。私は自分が20時間の欲求不満を救ってくれることを実感できました。 – cwallenpoole
ハ、私はあなたを信じていますが、私は尋ねなければなりませんでした。 1つの問題は、PEMは実際には特定のフォーマットではなく、バイナリBLOBを取り、base64でエンコードし、BEGINおよびENDラインで囲む一般的なフォーマットです。おそらくImportKeyはある種類のバイナリBLOBを必要とし、あなたのPEMファイルは他の種類です。このような状況では、PKCS8、PKCS12、およびopenssl独自の3つの共通の秘密鍵形式があります。おそらく後日、私はGoogle Chromeソフトウェアを試してみて、それがどれであるか、そしてどのPyCrypto RSAが探しているかを調べることができます。 –