Jak szyfrować i odszyfrowywać pliki PDF za pomocą Pythona

Jak szyfrować i odszyfrowywać pliki PDF za pomocą Pythona

Nieautoryzowany dostęp do poufnych plików jest obecnie powszechnym problemem. Aby upewnić się, że tylko upoważnione przez Ciebie osoby będą miały dostęp do zawartości Twoich plików, możesz je zaszyfrować przed transmisją.

Dowiedz się, jak zaszyfrować plik PDF za pomocą Pythona i jak odszyfrować go z powrotem do pierwotnego stanu.

Konfigurowanie środowiska

Aby kontynuować, powinieneś znać podstawy Pythona.

Na terminalu Mac lub interfejsie wiersza poleceń systemu Windows uruchom następujące polecenie, aby zainstalować bibliotekę PyMuPDF:

pip install PyMuPDF

Ta biblioteka pomoże Ci otwierać i przetwarzać pliki PDF.

Instalacja biblioteki PyMuPDF na terminalu IDE

Po zakończeniu instalacji PyMuPDF możesz rozpocząć kodowanie.

Zaimportuj moduł Fitz

Zaimportuj moduł fitz biblioteki PyMuPDF. Umożliwi to dzwonienie i korzystanie z obsługiwanych funkcji.

import fitz

Będziesz używać fitz do otwierania, szyfrowania, odszyfrowywania i zapisywania plików PDF.

Sprawdź, czy plik PDF jest zaszyfrowany

Utwórz funkcję, która sprawdzi, czy plik PDF jest już zaszyfrowany, zwracając wartość logiczną.

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

Użyjesz tej funkcji później, aby pomóc programowi automatycznie zdecydować, czy zaszyfrować, czy odszyfrować wejściowy plik PDF.

Szyfrowanie pliku PDF

Utwórz funkcję do szyfrowania wejściowego pliku PDF. Funkcja sprawdzi, czy plik PDF jest już zaszyfrowany. Jeśli nie jest zaszyfrowany, zaszyfruje go przy użyciu algorytmu AES-256. Jest to najsilniejszy algorytm szyfrowania oferowany przez Fitz. W końcu zapisze zaszyfrowany plik 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")

Ta funkcja zapisuje zaszyfrowany plik PDF w ścieżce podanej w argumencie outfile.

Dane wyjściowe programu pokazujące zaszyfrowany plik w eksploratorze

Odszyfrowanie zaszyfrowanego pliku PDF

Utwórz funkcję deszyfrującą. Ta funkcja najpierw sprawdzi, czy plik wejściowy jest zaszyfrowany. Jeśli jest zaszyfrowany, poprosi użytkownika o podanie hasła. Następnie spróbuje otworzyć plik PDF przy użyciu podanego hasła. Jeśli hasło jest poprawne, fitz odszyfruje plik PDF. Następnie zapisze zawartość odszyfrowanego pliku PDF w innym niezabezpieczonym pliku 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')

Ten kod zapisuje niezabezpieczony plik PDF w bieżącym katalogu roboczym.

wyjście programu pokazujące odszyfrowany plik w eksploratorze

Program odszyfrował plik protected.pdf i zapisał go jako decrypted.pdf .

Sterowanie przebiegiem programu

Utwórz główną funkcję, która będzie sterować przebiegiem Twojego programu. Przechowa ścieżkę wejściowego pliku PDF, wywoła funkcję szyfrowania i odszyfrowania oraz przekaże parametry wejściowe.

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)

Aby zmienić nazwę zaszyfrowanego pliku PDF, zastąp „protected.pdf” własną nazwą, pamiętając o zachowaniu rozszerzenia „.pdf”.

Uruchamianie metody głównej

Upewnij się, że główna metoda działa jako pierwsza:

if __name__ == '__main__':
    main()

Ten kod sprawdza, czy skrypt jest uruchamiany jako program główny, a nie jako zaimportowany moduł. Jeśli jest to program główny, wywołuje funkcję główną.

Rozwiń swoje umiejętności w Pythonie

Tworzenie programu do szyfrowania/deszyfrowania plików PDF w Pythonie to zabawny, ale wymagający projekt. Pomaga ćwiczyć umiejętności Pythona i opanować obsługę plików w tym języku.

Aby rozwijać swoje umiejętności, powinieneś pracować nad większą liczbą projektów w Pythonie. Pomoże Ci to w interakcji z większą liczbą bibliotek i modułów Pythona. Python jest bardzo różnorodny i można go zastosować w wielu obszarach do wykonywania różnych zadań.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *