| ||||
| ||||
Последовательно вызываю функции CryptAcquireContext(@hProv, cont, ’Crypto-Pro GOST R 34.10-94 Cryptographic Service Provider’, PROV_GOST_94_DH, 0) ... CryptCreateHash(hProv, alg, 0, 0, @hash) ... CryptHashData(hash, @buf, size, 0) ... CryptGetHashParam(hash, HP_HASHVAL, nil, @size, 0) CryptGetHashParam(hash, HP_HASHVAL, signature, @size, 0) // хеш определяется ... CryptSignHash(hash, AT_SIGNATURE, nil, 0, nil, @size) // определяется размер подписи // Однако сама подпись вы дает ошибку NTE_NO_KEY CryptSignHash(hash, AT_SIGNATURE, nil, 0, signature, @size) Странно, хеш вычислился, опредилился размер подписи, но саму подпись невозможно получить. В чем может быть ошибка? | ||||
Ответы: | ||||
| ||||
Собственно, там написано - нет ключа AT_SIGNATURE в контейнере. Дело в том, что, в большинстве случаев, при создании контейнера в него записывается только ключевая пара AT_KEYEXCHANGE, которая используется как для обмена ключами при шифровании, так и для подписи. | ||||
| ||||
Хорошо, а если у меня ключи находятся на дискете, как мне их оттуда извлечь? | ||||
| ||||
Получаешь криптопровайдер с ключевым контейнером, который находится на дискете. Далее CryptGetUserKey. | ||||
| ||||
Выдается ошибка NTE_NO_KEY. 1. Может быть я имя контейнера не правильно определила, хотя я его брала из настроек КриптоПро и в реестре нашла такое имя в папке Crypto Pro/Settings/users/.../имя контейнера 2. У меня на диске есть папка в ней лежат 6 файлов с расширением .key, он сам определяет какой файл ему необходимо считать? | ||||
| ||||
Имя контейнера (для каждого из доступных в данный момент контейнеров, в т.ч. на съёмных носителях) можно посмотреть через панель управления КриптоПро CSP (2.0 и выше) - Сервис - Просмотреть сертификаты в контейнере - Обзор. Или программно - CryptGetProvParam с параметром PP_CONTAINER - можно последовательно перечислить все доступные. Если вызывается CryptAcquireContext с именем контейнера, которого нет - будет окошко с предложением подключить носитель (например, дискету), содержащий этот контейнер. | ||||