24.09.2004 16:43:32Связь с закрытым ключом Ответов: 3
Евгений
Я использую
CryptGetProvParam(...,PP_ENUMCONTAINERS,...,...,...)
чтобы получить имена закрытых ключей и в дальнейшем связать сертификат с соотв закрытым ключом.
Имя следующего вида:
70013f74-fe34-43c3-b77c-1ed3924e20b7
Но я заметил, что CSP КриптоПро связывает сертификаты с ключами следующего вида:
SCARD\ETOKEN_PRO16_42E1A70C\CC00\6B75
в w2k работают оба варианта, но в w98 связи из первого примера не дают требуемого эффекта.
Т.е. используя функции Capicom для подписания данных программа вываливается.
Я так и не смог найти, какая функция из CryptoAPI возвращает имя контейнера в виде
"SCARD\ET..."???
 
Ответы:
27.09.2004 10:34:16Василий
Та же самая - CryptGetProvParam, параметр - PP_UNIQUE_CONTAINER.
См. нашу документацию http://www.cryptopro.ru/CryptoPro/test/csp_2_0.chm
27.09.2004 10:57:51Евгений
Может я чего не так делаю, но вместо строки с контейнером, она возвращает такую:
$TempUserContext$
27.09.2004 12:18:08Василий
Правильно будет так:
CryptAcquireContext(..,CRYPT_VERIFYCONTEXT)
CryptGetProvParam(hProv, PP_ENUMCONTAINERS, ..,.., CRYPT_UNIQUE | CRYPT_FIRST);
CryptGetProvParam(hProv, PP_ENUMCONTAINERS, ..,.., CRYPT_UNIQUE);

Полностью пример есть в файле ctkey.c из проекта http://www.cryptopro.ru/CryptoPro/test/sample2_0.zip