Статус: Участник
Группы: Участники
Зарегистрирован: 11.12.2019(UTC) Сообщений: 12 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Добрый день всем! Сабж собственно в названии темы. Код:CAdESCOM.CadesSignedData signedData = new CadesSignedData();
signedData.ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
signedData.Content = "UJDDMHPFYDBCWPBVBMEXAKJUVXRLLU";
В строке signedData.Content = "UJDDMHPFYDBCWPBVBMEXAKJUVXRLLU"; получаю ошибку: "Параметр задан неверно". Видел на форуме темы про эту ошибку, но с тех пор прошло много лет и ошибка была исправлена (народ жаловался на ошибку при использовании плагина). Разработка в VS на C#. Reference настроил на cadescom.dll, расположенную в CommonFiles после установки Установлено cadescom версии 2.0, скачана последняя актуальная с центра загрузок (пробовали win32 и x64) Строка "UJDDMHPFYDBCWPBVBMEXAKJUVXRLLU" получена от сервиса ЦРПТ (data - набор случайных данных для подписания) Если добавить в конце ==, то ошибки нет. Подскажите, куда копать. Спасибо.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.12.2019(UTC) Сообщений: 12 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Скачал из шапки файлы Interop.CAdESCOM Interop.CAPICOM
После того как добавил их в референсы signedData.Content стал типом byte[], а был string.
Вроде в примерах что видел строка передается.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.12.2019(UTC) Сообщений: 12 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Перевел данные для signedData.Content в base64 - заработало. При этом удалил из референсов dll из шапки форума и добавил dll из центра загрузки.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,630 Сказал «Спасибо»: 494 раз Поблагодарили: 2035 раз в 1579 постах
|
Здравствуйте.
Проблема решена? |
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 393 раз в 366 постах
|
Автор: skart84 Код:signedData.ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
signedData.Content = "UJDDMHPFYDBCWPBVBMEXAKJUVXRLLU";
... Если добавить в конце ==, то ошибки нет. Это логично, указана кодировка Base64.
Суть в том, что кодировка Base64 всегда выдает результат с длиной кратной 4. Смотрите: если длина исходного текста кратна 3, то уже получаем кратную 4. Если сверх кратной трем есть один символ (8 бит), то при кодировании один символ содержит 6 бит, то есть потребется 2 символа, да еще 2 знака = как указатель что 2 символов не хватало в исходной строке до длины кратной трем. Если сверх кратной трем 2 символа (16 бит), то понадобится 3 символа, да еще 1 знак =. Выходит всегда при кодировании в результате длина кратная 4. Если углубляться дальше, то набор символов перед = будет меньше. Все это очевидный факт, но обычно он не сразу приходит в голову. При декодировании (упрощенно) получается строка длины кратной 3, из ее конца выкидываются символы согласно количеству знаков = в кодированной строке.
У Вас же длина не кратна 4, следовательно строка не может быть в кодировке Base64. И если это некодированные данные, то совершенно справделиво их надо закодировать в Base64, указанную в коде. Отредактировано пользователем 12 декабря 2019 г. 5:47:01(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.12.2019(UTC) Сообщений: 12 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Автор: Андрей Писарев Здравствуйте.
Проблема решена? С подписью да. Но получаю ошибку при авторизации на тестовый сервис ЦРПТ (но это уже другая история видимо): <UnauthorizedException><error>unauthorized</error><error_description>Full authentication is required to access this resource</error_description></UnauthorizedException>
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.12.2019(UTC) Сообщений: 12 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Автор: two_oceans У Вас же длина не кратна 4, следовательно строка не может быть в кодировке Base64. И если это некодированные данные, то совершенно справделиво их надо закодировать в Base64, указанную в коде. Спасибо.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close