簡體   English   中英

Python3 - imaplib - 使用 pem 證書解密

[英]Python3 - imaplib - decrypt using pem certificate

作為更大工作流程的一部分,我獲得了 email 和密碼,以及該證書的 .pfx 證書和密碼。 我需要使用它們來下載特定的電子郵件(特別是其附件),以便可以在其他腳本中進行處理。

我已經設法將 .pfx 文件轉換為 .pem 文件。 使用下面的代碼,我可以下載消息:

import email
import imaplib

EMAIL = 'test@test.com'
PASSWORD = 'testpassword'
SERVER = "outlook.office365.com"

# Connect to the server and go to its inbox
mail = imaplib.IMAP4_SSL(SERVER, port=993)
mail.login(EMAIL, PASSWORD)
mail.select('inbox')

# Get the relevant mail ID
status, ids = mail.search(None, '(HEADER Subject "Testmessage_")')
mail_id = ids[0].split()[0]

# Fetch the mail, get the data, write the file
status, contents = mail.fetch(mail_id, '(RFC822)')
data = contents[0][1]
with open("outputfile.txt", "wb") as outputfile:
    outputfile.write(data)

然后,我可以使用以下命令使用 OpenSSL 解碼 outputfile.txt:

openssl cms -decrypt -in outputfile.txt -inkey cert.pem > outputmessage.txt

我可以確認在 outputmessage.txt 文件中,附件的內容是可見的,並且通過一些解決方法,可在我的 Python 腳本的 rest 中使用。

然而,這意味着使用多個臨時文件和(至少)三個不同的命令(python - openssl - python 再次)。 我想在 Python 中完成所有這些操作,因此我不必創建臨時文件並且可以在以下腳本中立即處理結果。 此外,我更願意使用盡可能少的外部依賴項。

我已經看到提到了 M2Crypto 和密碼學,但我似乎無法讓 package 在我的機器上工作(有輪子的東西?)。 還有其他選擇嗎?

微不足道,

import subprocess

# ...

subprocess.run(['openssl', 'cms', '-decrypt',
        '-inkey', 'cert.pem', '-out', 'outputmessage.txt'],
    input=data, check=True)

我在本地沒有openssl cms ,但我從手冊頁猜測,如果您不傳入-in選項,它將讀取標准輸入。 如果那不是真的,也許嘗試類似-in-或者用/dev/stdin或您的平台提供的任何東西替換-

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM