Руководство по исправлению ddoc файла в виде хэш-кода

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

Такие поврежденные ddoc файлы без содержания могут возникнуть при использовании старой версии программы DigiDoc клиент (начиная с версии 2.7.8). Если Вы откроете лист подтверждения подписанного документа, а затем снова сохраните ddoc контейнер, исчезнет содержание документа.

NB! Если Вы используете программу DigiDoc клиент, обновите базовое программное обеспечение ID-карты на странице http://installer.id.ee .

Данное руководство предполагает, что

  • Вы исправляете ddoc контейнер, в формате 1.3
  • у Вас имеются оригинальные файлы, использованные в контейнере ddoc

При просмотре листа подтверждения из-за ошибки программы тэг DataFile в ddoc  контейнере был заменен на тэг DataFile в виде хэш-кода.

Так выглядит файл данных в корректном файле (Тэг DataFile содержит файл данных в виде base64):

<DataFile ContentType="EMBEDDED_BASE64" Filename="Testfail_1.xml" Id="D0" MimeType="application/octet-stream" Size="25" xmlns="http://www.sk.ee/DigiDoc/v1.3.0#">PHRhZz5UZXN0ZmFpbF8xLnhtbDwvdGFnPg==
</DataFile>

Так выглядит  тэг DataFile в виде хэш-кода (не содержит файл данных, изменены атрибуты, в том числе добавлено DigestValue):

<DataFile xmlns="http://www.sk.ee/DigiDoc/v1.3.0#" ContentType="HASHCODE" DigestType="sha1" DigestValue="t2F8toaz7zkJNrNJJve3oZHSfR4=" Filename="Testfail_1.xml" Id="D0" MimeType="application/octet-stream" Size="25">
</DataFile>

Чтобы исправить файл, нужно тэг DataFile в виде хэш-кода заменить на правильный формат и файл данных. Для этого:

  • Создайте новый ddoc контейнер (желательно использовать ту же программу, в которой был создан ddoc контейнер без файла данных).
  • Добавьте в контейнер те же документы, в той же последовательности и сохраните контейнер, не добавляя подпись.
  • Откройте в текстовом редакторе файл в виде хэш-кода и новый файл, созданный в предыдущем пункте.
  • Скопируйте из нового файла все тэги DataFile (их несколько, если в контейнере несколько файлов данных) вместе с их содержанием и замените ими содержание файла в виде хэш-кода.
  • Теперь сохраните исправленный файл и убедитесь, что подписи действительны и документы в контейнере корректно открываются.

Примечания

  • Обратите внимание на правильную кодировку перевода строки (\n). Перед заключительным тэгом DataFile должен находиться перевод строки - Это важно, потому что DigestValue хэш-кода вычисляется в пределах целого тэга DataFile (в том числе перевода строки)
  • Если при составлении оригинального файла какой-либо файл был удален до подписывания, то, возможно, нумерация файлов данных будет в неверной последовательности (например, если удаляется второй файл - D0,D2,D3) - при замене используйте правильное значение Id.
  • Файлы данных кодируются в base64.

Такие файлы также могут возникать в случае, если в приложении неправильно имплементировано использование хэш-кода типа содержания файла данных вебсервиса DigiDocService. Если вместо содержания файлов в вебсервис отправлен хэш (например, после верификации контейнера или добавления подписи), нужно при получении от вебсервиса DigiDoc файла заменить обратно элемент <DataFile>, содержащий файл данных.


ПОЛУЧИТЬ ПОМОЩЬ

Если Вы не нашли ответа на свой вопрос, свяжитесь с нашей командой.



  • Смотреть руководство
  • Оцените свой уровень владения компьютером, чтобы мы могли предложить Вам более качественные руководства

         

  • Проверка не удалось

Как мы можем улучшить эту cтатью?
Отправить Закрывать