У меня есть текстовый файл, который я назову filename.txt
. Сначала я вызываю
gpg --output filename.asc --clearsign filename.txt
Подписанный файл filename.asc
создается. Затем я вызываю
gpg --armor --output filename.sig --detach-sign filename.asc
Подпись извлекается из подписанного файла filename.asc
и сохраняется в filename.sig
.
Мой вопрос в том, можно ли каким-то образом объединить исходный неподписанный файл filename.txt
и файл с защищенной подписью ASCII filename.sig
, чтобы создать подписанный файл? В GPG такой функциональности не вижу, а может я чего-то не знаю? Или, может быть, это возможно с другими инструментами (обработка Java или что-то еще)?
Простое объединение этих файлов приводит к неудачной проверке подписи. В моем случае использования мне нужно подписать файл, ответить файлом подписи (без содержимого), затем я получаю отдельный файл подписи и файл conent. Мне нужно слить и зашифровать. На данный момент я не использую переключатель - отсоединить
, я просто разделил подписанный файл на два файла, а затем просто объединяю их. Но когда я использую - отсоединить
, меняется сигантура переключателя, и это не работает, когда я объединяю файл сигантуры с файлом содержимого. Он мог бы оставаться таким, как сейчас, но я хочу извлечь сигантуру стандартным способом, используя переключатель - отсоединить
, а не просто разрезать подписанный файл на части, но тогда я не вижу возможность объединить сигантуры, экспортированные с помощью - переключатель отсоединения
В общем , вы не можете просто взять отделенную подпись и объединить ее с исходными данными для создания сообщения с четкой подписью, если вы не нормализуете ввод перед созданием подписи.
GnuPG упакует исходный текст ввода по-разному, в зависимости от типа операции (отдельная или без знака). RFC4880 раздел 7.1 отмечает это (http://tools.ietf.org/html/rfc4880#section-7.1).
Как и в случае с двоичными подписями в текстовых документах, Подпись в открытом виде рассчитывается для текста с использованием канонических окончаний строк. Окончание строки (т.е.
) перед строкой «—— BEGIN PGP SIGNATURE ——», которая завершает подписанный текст, не считается частью подписанного текста.
Итак, мы должны сначала нормализовать окончания строк входящего текста, а затем удалить последний
от конца текста.
Вот пример того, как нужно изменить исходные входные данные:
gpg - броня --output filename.txt.asc --detach-sign
Это создаст отделенную подпись (filename.txt.asc) после первого преобразования концов строки (‘ $
‘) в возврат каретки (‘ r
‘), а также удалите символы возврата каретки + перевода строки из конца ввода текста..
Теперь вы можете создать сообщение с четкой подписью из подписи (filename.txt.asc) и исходного файла (filename.txt), вот так:
gpg --verify
(вам придется заменить алгоритм хеширования — SHA1
в моем примере — тем, что вы фактически используете )
Также следует отметить —
gpg --armor --output filename.sig --detach- sign filename.asc
Подпись извлекается из подписанного файла filename.asc и сохраняется в filename.sig.
При этом не извлекается никакая подпись — создается новая подпись данных в файле filename.asc
(включая исходную подпись) и сохраняет их в filename.sig
. Если вы передадите —clearsign вместо —detach-sign, вы поймете, что я имею в виду.
2
Как создать отдельную цифровую подпись для XML в Java
Я создал цифровую подпись с использованием файла PFX для XML-документа с помощью этого URL-адреса. Все, что я хочу знать, это как сделать это отдельной цифровой подписью, чтобы ее можно было передать в тег подписи XML? Прямо сейчас он заключен в мой XML-файл (то есть в подписи в конверте).
Используйте Google. Я нашел пример за 10 секунд.
http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.5/xmldsig/api/javax/xml/crypto/ doc-files/GenDetached.java
0