Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Как определить, что файл с подписью это отсоединённая подпись, либо присоединенная?
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 261  Откуда: Новосибирск Сказал(а) «Спасибо»: 78 раз Поблагодарили: 1 раз в 1 постах
|
Коллеги, подскажите плиз как можно определить, что файл с подписью это отсоединённая подпись, либо присоединенная?
Если использовать CAdESSignature cAdESSignature = new CAdESSignature(fileContent, null, null);
информация о подписи извлекается в обоих случаях
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,027  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 727 раз в 685 постах
|
Можно проверить наличие подписанных данных, отложив декодирование подписи: Код:
CAdESSignature cAdESSignature = new CAdESSignature(signature, null, null, false, true);
InputStream is = cAdESSignature.getSignedContent(); // если null, то подпись отделенная
cAdESSignature.decode();
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 261  Откуда: Новосибирск Сказал(а) «Спасибо»: 78 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Евгений Афанасьев  Можно проверить наличие подписанных данных, отложив декодирование подписи: Евгений, подскажите - предложенный Вами код полностью заменяет такой, только декодирование отложенное? CAdESSignature cAdESSignature = new CAdESSignature(fileContent, null, null); Просто, я когда заменяю указанную Выше строку на Ваш код, у меня на присоединённой подписи на cAdESSignature.decode(); исключение падает org.bouncycastle.cms.CMSException: problem parsing cert/crl sets возвращаю обратно - всё корректно проходит
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,027  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 727 раз в 685 постах
|
Проверим, спасибо за информацию. Ошибки быть не должно. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 11.02.2025(UTC) Сообщений: 3  Поблагодарили: 1 раз в 1 постах
|
Автор: Алексей Вдовин  Просто, я когда заменяю указанную Выше строку на Ваш код, у меня на присоединённой подписи на cAdESSignature.decode(); исключение падает org.bouncycastle.cms.CMSException: problem parsing cert/crl sets
Вероятно исключение выкидывает из-за того, что подписанные данные не были прочитаны. Перед тем как сделать cAdESSignature.decode() нужно прочитать все из потока is.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 261  Откуда: Новосибирск Сказал(а) «Спасибо»: 78 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Кирилл Артемкин  Вероятно исключение выкидывает из-за того, что подписанные данные не были прочитаны. Перед тем как сделать cAdESSignature.decode() нужно прочитать все из потока is. зачем? мне is только для проверки на null и нужна для decode() она не используется
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 11.02.2025(UTC) Сообщений: 3  Поблагодарили: 1 раз в 1 постах
|
Я написал к вопросу о том, почему ошибка на decode() появляется
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 261  Откуда: Новосибирск Сказал(а) «Спасибо»: 78 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Кирилл Артемкин  Я написал к вопросу о том, почему ошибка на decode() появляется так decode() это метод cAdESSignature к потоку он отошения никакого не имеет на сколько я понимаю поток вообще можно и не получать, если не нужно т.е. сначала cAdESSignature с отложенным декодированием, потом сразу cAdESSignature.decode()
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 11.02.2025(UTC) Сообщений: 3  Поблагодарили: 1 раз в 1 постах
|
При работе с подписью CAdESSignature последовательно читает ее содержимое. Когда мы создаем CAdESSignature с отложенным декодированием в конструкторе будет прочитана только часть подписи. В какой то момент в присоединенной подписи начинается фрагмент с подписанными данными. Их можно прочитать с помощью потока полученного из cAdESSignature.getSignedContent(). Затем в cAdESSignature.decode() будет прочитан оставшийся фрагмент подписи.
Если мы не прочитаем подписанные данные, то decode() споткнется о непрочитанный фрагмент с подписанными данными, отсюда и исключение (CAdESSignature же последовательно парсит подпись).
Таким образом decode() по сути связан с полученным потоком из cAdESSignature.getSignedContent(), потому что поток связан с парсером cAdESSignature. cAdESSignature.decode() сделать сразу после конструктора cAdESSignature с отложенным декодированием в случае присоединенной подписи не получится.
|
 1 пользователь поблагодарил Кирилл Артемкин за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 261  Откуда: Новосибирск Сказал(а) «Спасибо»: 78 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Кирилл Артемкин  При работе с подписью CAdESSignature последовательно читает ее содержимое. Когда мы создаем CAdESSignature с отложенным декодированием в конструкторе будет прочитана только часть подписи. В какой то момент в присоединенной подписи начинается фрагмент с подписанными данными. Их можно прочитать с помощью потока полученного из cAdESSignature.getSignedContent(). Затем в cAdESSignature.decode() будет прочитан оставшийся фрагмент подписи.
Если мы не прочитаем подписанные данные, то decode() споткнется о непрочитанный фрагмент с подписанными данными, отсюда и исключение (CAdESSignature же последовательно парсит подпись).
Таким образом decode() по сути связан с полученным потоком из cAdESSignature.getSignedContent(), потому что поток связан с парсером cAdESSignature. cAdESSignature.decode() сделать сразу после конструктора cAdESSignature с отложенным декодированием в случае присоединенной подписи не получится. Офигеть ... ну я до таких тонкостей сам никогда бы не допёр Спасибо, всё взлетело как задумано!
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро JCP, JavaTLS
»
Как определить, что файл с подписью это отсоединённая подпись, либо присоединенная?
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close