Подпишите PDF, используя пользовательскую цифровую подпись на Java - PullRequest
1 голос
/ 29 июня 2011

Я создал цифровую подпись, используя код Sun: http://download.oracle.com/javase/tutorial/security/apisign/examples/GenSig.java. Как я могу подписать PDF-файл, используя эту цифровую подпись? То есть: как я могу добавить подпись в файл PDF?

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Вы выбрали неправильный подход. Вы не можете легко добавить подпись в PDF. PDF спецификация включает в себя поддержку цифровых подписей. Эти подписи встраиваются в документ, и их вычисление является нетривиальным процессом.

Лучше всего отказаться от текущей реализации и взять, например. Библиотека iText или наша SecureBlackbox , которая сделает всю работу за вас.

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

0 голосов
/ 10 марта 2014

Шаги, связанные с добавлением цифровой подписи в файл PDF:

(I) Создать шаблон PDFDocument:

Создание PDFDocument с подписью шаблона:
PDSignature pdSignature,
pdSignature.setByteRange (new int [] {0, 0, 0, 0});
pdSignature.setContents (новый байт [n * 1024]);

где n - целое число, т. Е. Кратное число килобайт.

Примечание. Размер содержимого должен быть больше или равен сумме длины файла подписи и сертификата.

(II) Обновление шаблона PDF документа:

(a) Обновить / ByteRange [a b c d]:
(i) a = смещение% в "% PDF" (= 0, по умолчанию)
(ii) b = смещение "
(iii) c = смещение> in "/Contents<000...000>"
(iv) d = смещение F в "%% EOF" -c

(b) обновить раздел внешних ссылок:
обновить таблицу перекрестных ссылок (раздел xref), в которой указано положение объектов и

(c) Обновить раздел startxref:
обновить startxref, который является смещением начала таблицы перекрестных ссылок (xref).

(III) Создание цифровой подписи обновленного типового документа:
Создание обновленного шаблонного документа, исключая подписанные данные ("000 ... 000) из" /Contents<000...000>"

(IV) Обновить содержимое <> Раздел:
Замените первые / начальные "0" длины подписанных данных в "/ Содержание <000 ... 000>" на подписанные данные (в конверте) шаблона PDFFile.

Предложения:

Использовать SignatureInterface PDFBox:

(a) реализовать SignatureInterface для метода call () (б) предоставить входные, выходные файлы, хранилище ключей, псевдоним, пин-код (c) сохраните сумму

(или) использовать любую библиотеку java pdf (например, iText ...)

(или) Реализуйте Шаги I-IV в Java самостоятельно.

...