2

私は email.Message クラスと gnupg ライブラリを使用しています:

1 - Twisted imap4 クライアントから取得した電子メール文字列を解析します。

2 - 添付ファイル .pgp を取得します

3 - 復号化します。

次のように、典型的なメール コンテンツを復号化できます。

-----BEGIN PGP MESSAGE-----
Version: PGP 9
(...)
-----END PGP MESSAGE-----

しかし、執着は本当に私の人生を地獄にしています。

さて、私はさまざまな方法を試しましたが、最も論理的な方法は次のとおりです。

message = email.message_from_string(content)
if message.is_multipart():
    attachment = message.get_payload(1)
    gpg = gnupg.GPG(gnupghome=settings.PGP_PATH)
    return gpg.decrypt_file(attachment.get_payload(), passphrase=settings.PGP_PASSPH)

添付変数の最初の行は次のとおりです。

From nobody Mon Oct 15 18:54:12 2012
Content-type: application/octet-stream; 
 name="No_Norm_AMLT_908_1210201201.txt.pgp"
Content-Disposition: attachment; filename="No_Norm_AMLT_908_1210201201.txt.pgp"
Content-Transfer-Encoding: base64

そして、すべての暗号化されたもの。

とにかく……なんか変だな、なんか腑に落ちない。通常のメール クライアント ソフトウェア (Thunderbird など) から添付ファイルをダウンロードすると、バイナリのような .pgp ファイルが生成され (プレーン テキスト エディターで編集すると奇妙な文字が表示されます)、bash コマンドを使用して復号化できます。

gpg --decrypt No_Norm_AMLT_908_1210201201.txt.pgp

email.Message クラスと gnupg を使用して同じ結果 (復号化されたファイル) を取得する方法がわかりません。添付ファイルのペイロードをファイルに保存しようとしましたが、これは Thunderbird からダウンロードしたものとは異なります。復号化しないで、StringIO に入れてみました。また、base64 でエンコードしました。

gpg から受け取るメッセージは次のとおりです。

[GNUPG:] NODATA 1
[GNUPG:] NODATA 2
gpg: decrypt_message failed: eof

ありがとうございました!

4

1 に答える 1

0

わかりました!そうしなければならなかった:

base64.decodestring(attachment.get_payload())

次に、gpgを使用して復号化し、機能しました。これは、ヘッダーのために把握できます。

Content-Transfer-Encoding: base64

最終的なコードは次のとおりです。

message = email.message_from_string(content)
if message.is_multipart():
    attachment = message.get_payload(1)
    gpg = gnupg.GPG(gnupghome=settings.PGP_PATH)
    return gpg.decrypt_file(base64.decodestring(attachment.get_payload()),
                            passphrase=settings.PGP_PASSPH)
于 2012-10-16T09:06:30.677 に答える