Cách mã hóa và giải mã tệp PDF bằng Python
Truy cập trái phép vào các tệp nhạy cảm là một vấn đề phổ biến hiện nay. Để đảm bảo rằng chỉ những người bạn ủy quyền mới có thể truy cập nội dung tệp của bạn, bạn có thể mã hóa chúng trước khi truyền.
Tìm hiểu cách mã hóa tệp PDF bằng Python và cách giải mã tệp trở lại trạng thái ban đầu.
Mục Lục
Thiết lập môi trường
Để theo dõi, bạn nên làm quen với những kiến thức cơ bản về Python.
Trên thiết bị đầu cuối Mac hoặc giao diện dòng lệnh Windows, hãy chạy lệnh sau để cài đặt thư viện PyMuPDF:
pip install PyMuPDF
Thư viện này sẽ giúp bạn mở và thao tác với các tệp PDF.
Khi cài đặt xong PyMuPDF, bạn đã sẵn sàng bắt đầu viết mã.
Nhập mô-đun Fitz
Nhập mô-đun fitz của thư viện PyMuPDF. Điều này sẽ cho phép bạn gọi và sử dụng các chức năng mà nó hỗ trợ.
import fitz
Bạn sẽ sử dụng fitz để mở, mã hóa, giải mã và lưu các tệp PDF.
Kiểm tra xem PDF có được mã hóa không
Tạo một hàm sẽ kiểm tra xem PDF đã được mã hóa chưa và trả về giá trị boolean.
def pdf_is_encrypted(file):
pdf = fitz.Document(file)
return pdf.isEncrypted
Bạn sẽ sử dụng chức năng này sau để giúp chương trình tự động quyết định mã hóa hay giải mã tệp PDF đầu vào.
Mã hóa PDF
Tạo một chức năng để mã hóa PDF đầu vào. Hàm sẽ kiểm tra xem tệp PDF đã được mã hóa chưa. Nếu nó không được mã hóa, nó sẽ mã hóa nó bằng thuật toán AES-256. Đây là thuật toán mã hóa mạnh nhất mà fitz cung cấp. Cuối cùng, nó sẽ lưu tệp PDF được mã hóa.
def encrypt_pdf_file(pdf, password, outfile, file):
if not pdf_is_encrypted(file):
perm = int(
fitz.PDF_PERM_ACCESSIBILITY
| fitz.PDF_PERM_PRINT
| fitz.PDF_PERM_COPY
| fitz.PDF_PERM_ANNOTATE
)
encrypt_meth = fitz.PDF_ENCRYPT_AES_256
pdf.save(outfile, encryption=encrypt_meth, user_pw=password,
permissions=perm)
if pdf.save:
print("PDF encrypted")
Hàm này lưu tệp PDF được mã hóa vào đường dẫn tệp mà bạn chuyển vào đối số tệp ngoài.
Giải mã PDF được mã hóa
Tạo chức năng giải mã. Chức năng này trước tiên sẽ kiểm tra xem tệp đầu vào có được mã hóa hay không. Nếu nó được mã hóa, nó sẽ nhắc người dùng nhập mật khẩu. Sau đó, nó sẽ cố mở tệp PDF bằng Mật khẩu được cung cấp. Nếu mật khẩu đúng, fitz sẽ giải mã tệp PDF. Sau đó, nó sẽ lưu nội dung của tệp PDF được giải mã vào một tệp PDF không được bảo vệ khác.
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')
Mã này lưu tệp PDF không được bảo vệ trong thư mục làm việc hiện tại của bạn.
đã giải mã được được bảo vệ.pdf tập tin và lưu nó dưới dạng giải mã.pdf.
Kiểm soát dòng chảy của chương trình
Tạo một chức năng chính sẽ kiểm soát luồng chương trình của bạn. Nó sẽ lưu trữ đường dẫn của tệp PDF đầu vào, gọi hàm mã hóa và giải mã, đồng thời chuyển các tham số đầu vào.
def main():
file = 'sample.pdf'
pdf = fitz.open(file)
password = 'pass123'
encrypt_pdf_file(pdf, password, 'protected.pdf', file)
decrypt_pdf(pdf)
Để thay đổi tên của tệp PDF được mã hóa, hãy thay thế “protected.pdf” bằng tên của riêng bạn, đảm bảo giữ nguyên phần mở rộng “.pdf”.
Chạy phương thức chính
Đảm bảo phương thức chính chạy trước:
if __name__ == '__main__':
main()
Mã này kiểm tra xem tập lệnh có đang được chạy dưới dạng chương trình chính chứ không phải mô-đun đã nhập hay không. Nếu là chương trình chính, nó sẽ gọi hàm chính.
Nâng cao kỹ năng Python của bạn
Tạo chương trình mã hóa/giải mã PDF bằng Python là một dự án thú vị nhưng đầy thử thách. Nó giúp bạn thực hành các kỹ năng Python của mình và xử lý tệp thành thạo bằng ngôn ngữ này.
Để nâng cao kỹ năng của mình, bạn nên làm việc với nhiều dự án Python hơn. Điều này sẽ giúp bạn tương tác với nhiều thư viện và mô-đun Python hơn. Python rất đa dạng và bạn có thể áp dụng nó trong nhiều lĩnh vực để thực hiện các nhiệm vụ khác nhau.