Как ДЕЙСТВИТЕЛЬНО обезопасить PDF, предпочтительно используя ItextPDF? - PullRequest
5 голосов
/ 12 июля 2011

Я работаю над установкой паролей в PDF-файлах, чтобы предотвратить копирование / вставку и разрешить печать, добавлять водяные знаки и устанавливать пароль владельца для предотвращения дальнейших изменений.

Все работает хорошо, как и ожидалось, никаких проблем нет.

Затем я скачал этот бесплатный в течение 15 дней инструмент для удаления pdf, a-pdf.В мгновение ока он снимает всю защиту, независимо от сложности пароля (пробный с длиной 50 символов будет всех видов символов).

Я вижу, что в itextPDF есть другие методы для шифрования документа.Я использовал следующее:

File f = new File("C:/TEMP/zip/waterMarked.pdf");

String hardPassword = "D 5BaIZQ@ CqAk+NQCW)7Dkgb@i&02ifu!2TMX*d 0TGK(j(Kq";
byte[] hardPasswordByte = hardPassword.getBytes(); 

PdfReader reader = new PdfReader("C:/TEMP/zip/Original_document-9.pdf");

FileOutputStream out = new FileOutputStream(f);

PdfStamper stamp = new PdfStamper(reader, out);

//first argument is the user password. If set to something it asks for password when opening file, not wanted.
stamp.setEncryption(null, hardPasswordByte, PdfWriter.ALLOW_PRINTING, true);

//do stuff on the stamper, save file.

Кто-нибудь знает лучший способ защиты PDF-документов от кода Java?

1 Ответ

11 голосов
/ 12 июля 2011

PDF-файлы поддерживают 2 пароля: пароль пользователя и пароль владельца. Пользователь может просмотреть файл PDF, если он знает любой из этих паролей. Если файл имеет пароль пользователя, когда файл открывается с помощью средства просмотра PDF, средство просмотра просит пользователя ввести пароль, и сработают пароли пользователя или владельца. Если файл имеет только пароль владельца, документ отображается автоматически, и пароль требуется при попытке изменить права доступа к файлу. Это поток операций, предлагаемый спецификацией PDF, но в действительности он работает следующим образом: если файл защищен паролем пользователя, для взлома пароля требуется метод перебора, чем дольше пароль, тем больше времени требуется для взлома. Проблема в том, что вашим реальным пользователям нужен пароль для открытия файла. Если файл защищен только паролем владельца, по умолчанию есть ключ дешифрования (помните, что любой зритель может отображать файл PDF без запроса пароля), и приложение, которое обрабатывает файл PDF, решает, соблюдать или нет права доступа к документу. , После того, как файл был дешифрован, он сохраняется без шифрования, и у выходного файла больше нет пароля. Поскольку ваши документы имеют только пароль владельца, инструмент без проблем удаляет его, используя ключ дешифрования по умолчанию.

Существует несколько решений (более или менее связанных с iText) в зависимости от вашей аудитории: простое шифрование PDF (с указанными выше проблемами), если ваша аудитория широко распространена, например, вы публикуете статьи на веб-сайте; Решение DRM стороннего производителя, более сложное и требует установки различных плагинов на компьютерах ваших пользователей; шифрование сертификата (не уверен, поддерживает ли его iText), опять же сложное, требует, чтобы у каждого пользователя был цифровой сертификат, и доступ к документам был определен для каждого пользователя. Последние 2 варианта работают в контролируемой корпоративной среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...