| ||||
| ||||
Для того, чтобы создать сессионный ключ в КриптоПро, необходимо получить дескриптор криптопровайдера. Соответственно, создать(или открыть существующий, что мне не надо) криптоконтейнер. Мне нужно лишь создать сессионный ключ и всё. У меня утановлено следующее оборудование: -реестр -eTokenPro При получении дескриптора криптопровайдера отображается окно выбора ключевого носителя. Вот отображение этого окна мне совершенно не нужно ! Можно ли это как-то обойти ? | ||||
Ответы: | ||||
| ||||
Конечно. Можно вызвать CryptAcquireContext с флажком CRYPT_VERIFYCONTEXT. Подробности см. в нашем описании http://www.cryptopro.ru/CryptoPro/test/csp_2_0.chm и в MSDN. | ||||
| ||||
разве при использовании этого флага не обязательно существование контейнера ? птому что это: CPAcquireContext( &crtmgr_win->prov, asCont1.c_str(), CRYPT_VERIFYCONTEXT,//CRYPT_NEWKEYSET + CRYPT_MACHINE_KEYSET, &crtmgr_win->pTable); возвращает NTE_BAD_FLAGS. И, на сколько я понял из документации, диалог выбора ключевого носителя опосредовано предлагает пользователю выбор ДСЧ для генерации ключа... | ||||
| ||||
Причем тут контейнер, если нужен сессионный ключ? | ||||
| ||||
> Причем тут контейнер, если нужен сессионный ключ? Ключ создаётся функцией CPGenKey, первым параметром которой являеется дескриптор криптопровайдера. А как я получу дескриптор криптопровайдера без создания контейнера ? Или есть другой способ создания ключа ? | ||||
| ||||
...А в MSDN про CPAcquireContext почитать никак? Там же достаточно ясно написано: pszContainer [in] Key container name. This is a null-terminated string that identifies the key container to the CSP. This name is independent of the method used to store the keys. Some CSPs store their key containers internally (in hardware), some use the system registry, and others use the file system. When dwFlags is set to CRYPT_VERIFYCONTEXT, pszContainer must be set to NULL. ОСОБОЕ внимание прошу обратить на последнее предложение :) | ||||
| ||||
А еще лучше низкоуровневые функции прямого доступа к провайдеру типа CP... не использовать. Используйте функцию CryptAcquireContext. | ||||
| ||||
:) Да действительно, я ограничился чтением лишь криптопрошной документации, поэтому с этой цитаттой не ознакомился. А использую я эти функции, потому что на их основе коллега написал давным-давно класс. Его и юзаю! Ещё раз спасибо. | ||||