#pdf #pdf-generation #openpdf #pdf-specification
Вопрос:
Я просто наткнулся на следующий код в OpenPDF при создании DocMDP:
private void addDocMDP(PdfDictionary crypto) {
PdfDictionary reference = new PdfDictionary();
PdfDictionary transformParams = new PdfDictionary();
transformParams.put(PdfName.P, new PdfNumber(certificationLevel));
transformParams.put(PdfName.V, new PdfName("1.2"));
transformParams.put(PdfName.TYPE, PdfName.TRANSFORMPARAMS);
reference.put(PdfName.TRANSFORMMETHOD, PdfName.DOCMDP);
reference.put(PdfName.TYPE, PdfName.SIGREF);
reference.put(PdfName.TRANSFORMPARAMS, transformParams);
reference.put(new PdfName("DigestValue"), new PdfString("aa"));
PdfArray loc = new PdfArray();
loc.add(new PdfNumber(0));
loc.add(new PdfNumber(0));
reference.put(new PdfName("DigestLocation"), loc);
reference.put(new PdfName("DigestMethod"), new PdfName("MD5"));
reference.put(PdfName.DATA, writer.reader.getTrailer().get(PdfName.ROOT));
PdfArray types = new PdfArray();
types.add(reference);
crypto.put(PdfName.REFERENCE, types);
}
Это также будет помещено в PDF-файл:
/Reference[<</DigestLocation[0 0] /TransformMethod/DocMDP /Type/SigRef /DigestMethod/MD5
/DigestValue(aa) /TransformParams<</P 1/V/1.2/Type/TransformParams>>/Data 5 0 R>>]
Я изменил метод переваривания на что-то более новое, и это просто сработало. Кроме того, » аа » выглядит довольно статично и, честно говоря, похоже на фиктивную реализацию.
Есть какие-нибудь идеи о том, что это за ценности? И почему они могут быть изменены без последствий?
Я сравнил его с его предшественником *текст 5, но там то же самое…
Ответ №1:
Ваш вопрос, по сути, касается не OpenPDF в частности, а определенных значений в словаре преобразования DocMDP. Таким образом, мой ответ не будет сосредоточен на OpenPDF.
В версиях PDF 1.5 и 1.6 в дополнение к дайджестам диапазона байтов в сигнатурах с помощью методов преобразования использовались так называемые дайджесты объектов. Эти дайджесты были рассчитаны рекурсивно по определенному набору объектов PDF в зависимости от типа и параметров рассматриваемого преобразования.
Значение метода дайджеста-это алгоритм хэширования, используемый в дайджестах объектов.
В справочнике Adobe по PDF 1.7 дайджесты объектов были устаревшими, что было действительно ясно из ошибок:
В ISO 32000-1 дайджесты объектов были полностью удалены из текста (в некоторых случаях оставляя текст, который трудно понять).
Таким образом, значения, которые вас интересуют, являются устаревшими и больше не должны использоваться для целей проверки.
Вы также найдете причину, по которой iText использует фиктивные значения в тех же ошибках:
Таким образом, Adobe Acrobat 7 и 8 требовали наличия некоторых значений. В настоящее время в них больше нет необходимости.
В этом контексте вас может заинтересовать выпуск 117 в формате PDF — метод дайджеста ошибочно стал обязательным в стандарте ISO 32000-2:2020, и этот вопрос касается его устаревания.
Комментарии:
1. OpenPDF был отправной или пусковой точкой моего вопроса, и у меня была эта реализация под рукой, поэтому я упомянул OpenPDF. Но я также увидел независимость, и именно поэтому я также добавил тег #PDF-Спецификация. В остальном, как всегда, точно 😉 (Я всегда забываю об этих документах с ошибками) спасибо
2. ах, и ваш собственный ответ теперь закрывает цикл обратно в OpenPDF… 😉
Ответ №2:
Поэтому в OpenPDF мы могли бы адаптировать метод следующим образом:
private void addDocMDP(PdfDictionary crypto) {
PdfDictionary reference = new PdfDictionary();
PdfDictionary transformParams = new PdfDictionary();
transformParams.put(PdfName.P, new PdfNumber(certificationLevel));
transformParams.put(PdfName.V, new PdfName("1.2"));
transformParams.put(PdfName.TYPE, PdfName.TRANSFORMPARAMS);
reference.put(PdfName.TRANSFORMMETHOD, PdfName.DOCMDP);
reference.put(PdfName.TYPE, PdfName.SIGREF);
reference.put(PdfName.TRANSFORMPARAMS, transformParams);
reference.put(PdfName.DATA, writer.reader.getTrailer().get(PdfName.ROOT));
PdfArray types = new PdfArray();
types.add(reference);
crypto.put(PdfName.REFERENCE, types);
}
Я попробовал и протестировал его, и нет никаких жалоб от *dobe reader…