Шифрование и расшифровка PDF-файлов на Python
Управление безопасностью документа имеет решающее значение при работе с конфиденциальным или бизнес‑критически важным контентом. Aspose.PDF for Python via .NET предоставляет мощный API для программного применения шифрования, контроля доступа через права и расшифровки защищённых PDF‑файлов.
В этой статье разработчиков Python познакомят с практическими примерами по настройке привилегий, применению и снятию шифрования, изменению паролей и обнаружению состояний защиты — всё в рамках рабочего процесса с PDF.
Aspose.PDF for Python via .NET дает разработчикам полный контроль над безопасностью PDF:
Установить привилегии - Тонко настроенный контроль доступа с использованием разрешений. Зашифровать файл - Применить шифрование AES или RC4 с пользовательскими паролями. Расшифровать файл - Удалить защиту, используя пароль владельца. Изменить пароли - Смените или обновите учетные данные без изменения содержимого. Проверка безопасности - Обнаружить статус шифрования или требуемые типы паролей.
Используйте эту страницу, когда вам нужно защищать PDF‑документы паролями, ограничивать печать или копирование, менять учётные данные или проверять, зашифрован ли документ.
Установить привилегии для существующего PDF‑файла
Вы можете ограничить или разрешить определённые операции (например, печать, копирование, заполнение форм), назначая пользовательские и владелецкие пароли вместе с правами доступа.
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def set_privileges_on_existing_pdf_file(infile: str, outfile: str) -> None:
"""Set restricted privileges on an existing PDF document."""
with ap.Document(infile) as document:
document_privilege = ap.facades.DocumentPrivilege.forbid_all
document_privilege.allow_screen_readers = True
document.encrypt(
"user",
"owner",
document_privilege,
ap.CryptoAlgorithm.AESx128,
False,
)
document.save(outfile)
Шифрование PDF-файла с использованием различных типов шифрования и алгоритмов
Шифрование PDF гарантирует, что только пользователи с действительными учетными данными могут открыть или изменить файл.
Ключевые термины:
-
Пароль пользователя. Требуется для открытия документа.
-
Пароль владельца. Требуется для изменения разрешений или снятия шифрования.
-
KeySize. Используйте AE_SX128 для максимальной безопасности в современных процессах.
Следующий фрагмент кода показывает, как зашифровать PDF‑файлы.
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def encrypt_pdf_file(infile: str, outfile: str) -> None:
"""Encrypt a PDF document with user and owner passwords."""
with ap.Document(infile) as document:
document.encrypt(
"user",
"owner",
ap.Permissions.EXTRACT_CONTENT,
ap.CryptoAlgorithm.AESx128,
)
document.save(outfile)
Расшифровать PDF-файл, используя пароль владельца
Чтобы удалить защиту паролем и восстановить полный доступ:
- Загружает зашифрованный PDF, используя правильный пароль (‘password’ — это пароль пользователя или владельца).
- Удаляет всю защиту паролем и настройки шифрования из документа.
- Сохраняет теперь незащищённый PDF в указанный файл вывода.
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def decrypt_pdf_file(infile: str, outfile: str) -> None:
"""Decrypt a password-protected PDF document."""
with ap.Document(infile, "password") as document:
document.decrypt()
document.save(outfile)
Шифрование и дешифрование PDF с сертификатами открытого ключа
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def pub_sec_encryption(
crypto_algorithm,
pub_cert: str,
in_pfx: str,
outfile: str,
) -> None:
"""Demonstrate public-key encryption and decryption."""
pfx_password = "12345"
with ap.Document() as document:
document.info.title = "TestTitle"
document.info.author = "TestAuthor"
page = document.pages.add()
page.paragraphs.add(ap.text.TextFragment("Hello World!"))
with open(pub_cert, "rb") as file_stream:
byte_content = file_stream.read()
document.encrypt(
ap.Permissions.PRINT_DOCUMENT,
crypto_algorithm,
[byte_content],
)
document.save(outfile)
with ap.Document(
outfile,
ap.security.CertificateEncryptionOptions(pub_cert, in_pfx, pfx_password),
) as document:
print(document.info.title)
print(document.info.author)
text_absorber = ap.text.TextAbsorber()
document.pages[1].accept(text_absorber)
print(text_absorber.text)
document.decrypt()
document.save(path.join(path.dirname(outfile), "pubsec_decrypted_out.pdf"))
Изменить пароль PDF‑файла
Обновить учетные данные безопасности (пароли пользователя и владельца) PDF‑документа, сохранив его содержимое и структуру.
- Открывает PDF, используя существующий пароль владельца (‘owner’), который предоставляет полный доступ, включая возможность изменять настройки безопасности.
- Заменяет старые пароли новым паролем пользователя (’newuser’) и новым паролем владельца (’newowner’).
- Сохраняет PDF с обновлёнными настройками пароля.
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def change_password(infile: str, outfile: str) -> None:
"""Change the passwords of a password-protected PDF document."""
with ap.Document(infile, "owner") as document:
document.change_passwords("owner", "newuser", "newowner")
document.save(outfile)
Как определить, защищён ли исходный PDF паролем
Определить правильный пароль из массива
В некоторых сценариях вам может потребоваться определить правильный пароль из списка потенциальных вариантов, чтобы получить доступ к защищённому PDF. Приведённый ниже фрагмент кода демонстрирует, как проверить, защищён ли файл PDF паролем, а затем попытаться разблокировать его, перебирая заранее определённый список паролей с помощью Aspose.PDF for Python via .NET.
Процесс включает:
- Использование PdfFileInfo для определения, зашифрован ли PDF.
- Пытается открыть PDF с каждым паролем, используя ap.Document().
- Если успешно, он выводит количество страниц.
- Если нет, он перехватывает исключение и сообщает о неправильном пароле.
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def determine_correct_password_from_array(infile: str) -> None:
"""Try a list of passwords until the document opens successfully."""
with ap.facades.PdfFileInfo() as pdf_file_info:
pdf_file_info.bind_pdf(infile)
print(f"File is password protected {pdf_file_info.is_encrypted}")
passwords = ["test", "test1", "test2", "test3", "sample"]
for password in passwords:
try:
with ap.Document(infile, password) as document:
if len(document.pages) > 0:
print(f"Password = {password} is correct")
print(f"Number of pages in document = {len(document.pages)}")
break
except Exception:
print(f"Password = {password} is not correct")