Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 43 Откуда: РФ Сказал «Спасибо»: 14 раз
|
Доброго времени В настоящий момент удалось подписать файл методом .SignCades на выходе получаю либо присоединенный файл либо отдельный файл подписи .sig Скажите пожалуйста как осуществляется установка нескольких подписей на одном файл, (2 человека = 2 сертификата). Если подписать 2-мя сертификатами отвязанными подписями я получу 2 файла sig тут все понятно, но как получить один файл .sig после двойного подписания?В данном методе не пойму как учитывается ранее созданная подпись
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,319 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Здравствуйте. В документации доступен поиск, который выдает ссылку на пример № 5проверить существующую подпись - VerifyCades, а потом вызвать CoSignCades - добавить новую. |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 43 Откуда: РФ Сказал «Спасибо»: 14 раз
|
При подписании файла совмещенной подписью Цитата: Dim fromFile Dim toFile fromFile = "C:\Users\makhmudov.damir\Downloads\cr\f.pdf" toFile = "C:\Users\makhmudov.damir\Downloads\cr\b.sig" Const CADES_BES = 1 Const CADES_DEFAULT = 0 Const CAPICOM_ENCODE_BASE64 = 0
' Укажите правильный серийный номер сертификата. Dim sSerialNumber : sSerialNumber = "1200648CA874DF6832C1AFCB12000200648CA8"
Dim oSigner Set oSigner = CreateObject("CAdESCOM.CPSigner") oSigner.Certificate = GetSignerCertificate(sSerialNumber) Dim oSignedData Set oSignedData = CreateObject("CAdESCOM.CadesSignedData") Content = LoadFilew(fromFile) oSignedData.Content = Content Dim sSignedData ' Создание и проверка подписи CAdES BES sSignedData = oSignedData.SignCades(oSigner, CADES_BES, false, CAPICOM_ENCODE_BASE64) SaveFile toFile, sSignedData Получаю файл b.sig При проверке этого файла утилитой КриптоПРО Tools проверка проходит успешно При попытке проверить ее скриптом: Цитата: Dim oSignedData Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
Dim Message Message = LoadFile("C:\Users\makhmudov.damir\Downloads\cr\b.sig")
res = oSignedData.VerifyCades (Message, 1, false) msgbox res получаю пустое сообщение, в доках написано: Возвращаемое значение имеет тип HRESULT. Значение S_OK означает успешное выполнение.что я делаю не так при проверке?При подписании отделенной подписью: Цитата: Dim fromFile Dim toFile fromFile = "C:\Users\makhmudov.damir\Downloads\cr\f.pdf" toFile = "C:\Users\makhmudov.damir\Downloads\cr\b.sig" Const CADES_BES = 1 Const CADES_DEFAULT = 0 Const CAPICOM_ENCODE_BASE64 = 0
' Укажите правильный серийный номер сертификата. Dim sSerialNumber : sSerialNumber = "1200648CA874DF6832C1AFCB12000200648CA8"
Dim oSigner Set oSigner = CreateObject("CAdESCOM.CPSigner") oSigner.Certificate = GetSignerCertificate(sSerialNumber) Dim oSignedData Set oSignedData = CreateObject("CAdESCOM.CadesSignedData") Content = LoadFilew(fromFile) oSignedData.Content = Content Dim sSignedData ' Создание и проверка подписи CAdES BES sSignedData = oSignedData.SignCades(oSigner, CADES_BES, true, CAPICOM_ENCODE_BASE64) SaveFile toFile, sSignedData Получаю файл e.sig (меньшего размера естественно) Но при попытке проверить его с помощью Крипто ПРО Tools указывая файл e.sig и оригинальный файл f.pdf Получаю ошибку: Цитата:Подпись 1/1: Ошибка при проверке (0x80091007: Неправильное значение хеша.) Cубъект: E=samrukov@gmail.com, CN=Damir, OU=TDMS, O=CSoft, L=Kazan, C=RU Отпечаток: F16E348A9B4DFA05B90F84E4046F65AC2FDC1972 Время подписания: 17/07/2024 12:54:02 UTC Цепочка: CRYPTO-PRO Test Center 2 → Damir
При попытке проверить подпись скриптом: Цитата: Dim oSignedData Set oSignedData = CreateObject("CAdESCOM.CadesSignedData") ' Загрузка подписанных данных для проверки fromFile = "C:\Users\makhmudov.damir\Downloads\cr\f.pdf" toFile = "C:\Users\makhmudov.damir\Downloads\cr\e.sig" Dim Content : Content = LoadFile(fromFile) Dim Message : Message = LoadFile(toFile) oSignedData.Content = Content ' Проверка отделенной подписи res = oSignedData.VerifyCades(Message, 1, True) msgbox res Получаю также пустое сообщение
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,319 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Возвращаемое значение имеет тип HRESULT. Значение S_OK
это не строка, зачем msgbox.
Если будет ошибка - будет исключение.
Или прикладывайте тестовые файлы (pdf или txt + к ним sig) или смотрите что там внутри (asn1 редакторы или утилита у меня в подписи, покажет хеши из sig\сверить с хешем из присоединенной, файл же pdf не менялся?) |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 43 Откуда: РФ Сказал «Спасибо»: 14 раз
|
Не нашел утилит в подписи. f.pdf (171kb) загружен 1 раз(а). - оригинальный файл e.zip (2kb) загружен 1 раз(а). - файл подписи (пришлось запаковать тк диалог загрузки не поддерживает файл sig)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,319 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
хеш у файла pdf: 18B8F01F801A33352D68AA8C16215F5D178291C2880496143C5A73C49B6CD994 а в файле sig: 6EB884A3C147A1A661D9FB4ECFE2A5372C7C15D2909FAA3F2C943DB635E60C93 предлагаю сделать как в js - закодировать в base64, указать, что данные закодированы и потом присвоить content вот в этом месте: Цитата:Content = LoadFilew(fromFile) oSignedData.Content = Content Читать - здесь. Пример на js - здесьучасток: Код:
oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
// Значение свойства ContentEncoding должно быть задано
// до заполнения свойства Content
yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
yield oSignedData.propset_Content(dataInBase64);
Snimok ehkrana ot 2024-07-17 17-45-58.png (16kb) загружен 2 раз(а). Snimok ehkrana ot 2024-07-17 17-45-04.png (32kb) загружен 2 раз(а). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 43 Откуда: РФ Сказал «Спасибо»: 14 раз
|
сделал как вы сказали Цитата:Dim oSignedData Set oSignedData = CreateObject("CAdESCOM.CadesSignedData") oSignedData.ContentEncoding = 0 Content_o = LoadFilew(fromFile) Content = Base64Encode(Content_o) oSignedData.Content = Content указал ContentEncoding = 0 как сказано тутпровернул фарш в bas64 Цитата:Content = Base64Encode(Content_o) предварительно проверил на обычном тексте что ф-я точно отдает base64 создал подпись e.sig Утилита Крипто ПРО дает ту же ошибку неверного хэша
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,319 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Автор: Дамир Шамуков сделал как вы сказали Цитата:Dim oSignedData Set oSignedData = CreateObject("CAdESCOM.CadesSignedData") oSignedData.ContentEncoding = 0 Content_o = LoadFilew(fromFile) Content = Base64Encode(Content_o) oSignedData.Content = Content указал ContentEncoding = 0 как сказано тутпровернул фарш в bas64 Цитата:Content = Base64Encode(Content_o) предварительно проверил на обычном тексте что ф-я точно отдает base64 создал подпись e.sig Утилита Крипто ПРО дает ту же ошибку неверного хэша Внимательно перечитывать. В примере указано что? CADESCOM_BASE64_TO_BINARY Вводим слева в поиск и находим раздел. CADESCOM_BASE64_TO_BINARY Кодировка BASE64. 0x01 А то, что сделано - указано 0 = бинарные данные, а они в base64 - хеш от base64 внутри рассчитался. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,319 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Код: // Значение свойства ContentEncoding должно быть задано
// до заполнения свойства Content
yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);
yield oSignedData.propset_Content(dataInBase64);
это для безопасной передачи бинарных данных внутрь плагина и далее в CSP - сообщаем, что данные dataInBase64 - это base64, внутри происходит декодирование. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.02.2015(UTC) Сообщений: 43 Откуда: РФ Сказал «Спасибо»: 14 раз
|
Прошу прощения, а что именно туда указать из: CADESCOM_BASE64_TO_BINARY Кодировка BASE64. 0x01 CADESCOM_STRING_TO_UCS2LE Кодировка UTF-8 или UNICODE. 0x00 при 0 и 1 подпись создает но неверный хэш Текущий скрипт Цитата:oSignedData.ContentEncoding = 1 Content_o = LoadFilew(fromFile) Content = Base64Encode(Content_o) oSignedData.Content = Content Отредактировано пользователем 17 июля 2024 г. 18:05:39(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close