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.
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.
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.
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