如何使用 Python 加密和解密 PDF 文件

如何使用 Python 加密和解密 PDF 文件

未經授權訪問敏感文件是當今的一個常見問題。為確保只有您授權的人才能訪問您的文件內容,您可以在傳輸前對其進行加密。

了解如何使用 Python 加密 PDF 文件,以及如何將文件解密回其原始狀態。

設置環境

要繼續學習,您應該熟悉 Python 的基礎知識。

在 Mac 終端或 Windows 命令行界面上,運行以下命令來安裝 PyMuPDF 庫:

pip install PyMuPDF

該庫將幫助您打開和操作 PDF 文件。

在 IDE 的終端上安裝 PyMuPDF 庫

當您完成 PyMuPDF 的安裝後,您就可以開始編碼了。

導入 Fitz 模塊

導入 PyMuPDF 庫的 fitz 模塊。這將使您能夠調用和使用它支持的功能。

import fitz

您將使用 fitz 打開、加密、解密和保存 PDF。

檢查PDF是否加密

創建一個函數來檢查 PDF 是否已加密並返回一個布爾值。

def pdf_is_encrypted(file):
    pdf = fitz.Document(file)
    return pdf.isEncrypted

稍後您將使用此函數來幫助程序自動決定是對輸入的 PDF 進行加密還是解密。

加密 PDF

創建一個函數來加密輸入的 PDF。該函數將檢查 PDF 是否已加密。如果未加密,它將使用 AES-256 算法對其進行加密。這是 fitz 提供的最強的加密算法。它最終將保存加密的 PDF。

def encrypt_pdf_file(pdf, password, outfile, file):
    if not pdf_is_encrypted(file):
        perm = int(
            # Ensure everyone with the PDF
            # can access it
            fitz.PDF_PERM_ACCESSIBILITY
            | fitz.PDF_PERM_PRINT # permits printing
            | fitz.PDF_PERM_COPY # permits copying
            | fitz.PDF_PERM_ANNOTATE # permits annotations
        )

        # eEncryption algorithm
        encrypt_meth = fitz.PDF_ENCRYPT_AES_256

        pdf.save(outfile, encryption=encrypt_meth, user_pw=password,
                 permissions=perm)

        if pdf.save:
            print("PDF encrypted")

此函數將加密的 PDF 保存到您在 outfile 參數中傳遞的文件路徑。

在資源管理器上顯示加密文件的程序輸出

解密加密的 PDF

創建解密函數。此函數將首先檢查輸入文件是否已加密。如果是加密的,它會提示用戶輸入密碼。然後它將嘗試使用提供的密碼打開 PDF。如果密碼正確,fitz 將解密 PDF。然後它將解密的 PDF 的內容保存到另一個未受保護的 PDF 文件中。

def decrypt_pdf(file):
    if pdf_is_encrypted(file):
        password = input('Enter pdf password: ')
        pdf = fitz.open(file)

        if pdf.authenticate(password):
            pdf.save('decrypted.pdf')


            if pdf.save:
                print("PDF decrypted")
        else:
            print('Incorrect Password')

此代碼將未受保護的 PDF 保存在您當前的工作目錄中。

在資源管理器上顯示解密文件的程序輸出

已解密protected.pdf文件並將其保存為decrypted.pdf

控製程序的流程

創建一個主函數來控製程序的流程。它將存儲輸入PDF的路徑,調用加密和解密函數,並傳遞輸入參數。

def main():
    # replace the file path with either that of
    # the pdf to be encrypted or decrypted
    file = 'sample.pdf'
    pdf = fitz.open(file)
    password = 'pass123'
    encrypt_pdf_file(pdf, password, 'protected.pdf', file)
    decrypt_pdf(pdf)

要更改加密 PDF 文件的名稱,請將“protected.pdf”替換為您自己的,確保保留“.pdf”擴展名。

運行主要方法

確保 main 方法首先運行:

if __name__ == '__main__':
    main()

此代碼檢查腳本是否作為主程序而不是導入的模塊運行。如果是主程序,則調用主函數。

提高你的 Python 技能

在 Python 中創建 PDF 加密/解密程序是一個有趣但具有挑戰性的項目。它可以幫助您練習 Python 技能並掌握使用該語言處理文件的能力。

為了提高你的技能,你應該從事更多的 Python 項目。這將幫助您與更多 Python 庫和模塊進行交互。Python 非常多樣化,您可以在許多領域應用它來執行不同的任務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *