| ||||
| ||||
Здравствуйте! Для подписи делаю следующее: 1. Перегоняю исходные данные в Base64 (чтобы можно было записать в строковый тип) 2. Создаю объект store, вызываю его метод open (CAPICOM_CURRENT_USER_STORE, “Имя хранилища”, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED) 3. Выбираю сертификат для подписи. 4. Создаю объект Signer и устанавливаю: Signer.Certificate = «Выбранный сертификат» 5. Создаю объект SignedData. Ставлю Content на строку с исходными данными в Base64 6. Вызываю метод SignedData.Sign, которому передаю объект Signer , bDetached = false, CAPICOM_ENCODE_ANY. 7. Метод возвращает Base64-строку. Собственно вопросы: - Полученный результат (Base64-строка) – это и есть сообщение с ЭЦП? - Все ли я делаю правильно) ? - Каким образом происходит выбор алгоритма ЭЦП и выбор длины ключа? Или эти данные берутся из сертификата? Можно ли как-то указать использование другого алгоритма/длины ключа. Для проверки ЭЦП: 1. Вызываю метод Verify объекта SignedData, с передачей Base64-строки, полученной как результат работы метода sign, bDeatached = false, CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE. 2. Произвожу обратное преобразование из Base64, получаю исходные данные. Все вроде замечательно: полученный результат соответствует исходным данным (до подписи). Правильно ли я делаю? Извините за ламерские вопросы в примитивной формулировке, но раньше никогда с такими вещами … как то не приходилось. Заранее большое спасибо за ответы! | ||||
Ответы: | ||||
| ||||
Да, это и есть сообщение с ЭЦП. Не уверен насчет первого пункта - разве в .NET нельзя делать строки, содержащие бинарные данные? Данные берутся из провайдера, которым был создан секретный ключ, использующийся при подписи. А вот при проверки - да, данные берутся из сертификата. Никакой другой алгоритм/ключ указать нельзя. А в целом алгоритм работы правильный :) | ||||
| ||||
Большое спасибо! Насчет бинарных данных в .net-string'ах - вроде все же нет, хотя не уверен, т.к. сам на эту штуку только сел. Это вообще мой первый .net-project. | ||||