Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CryptAcquireContext - CryptoAPI problem!

12K
22 декабря 2006 года
needjava
30 / / 06.10.2006
Проблема такая — CryptAcquireContext — возвращает "Набор ключей не определен"
Вот код:
 
Код:
HCRYPTPROV hCryptProv = NULL;
BOOL    result;

result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);


Пробовал следующее:
 
Код:
//1
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, NULL);
//2
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET);
//3
result = CryptAcquireContext (&hCryptProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, 0);



Не помогло.

А если вот так:
 
Код:
result = CryptAcquireContext (&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0);


то работает(то есть — провайдер по умолчанию)

Причем до этого я уже делал(в другой функции):
 
Код:
BOOL    result;
result = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);
...
...
...
result = CryptReleaseContext(hCryptProv, 0);


и result везде был 1. А почему здесь ошибка, понять никак не могу?
А кроме того!:
Если вот так сделать то result = 1, но валится дальше:
Код:
BOOL result;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0); // здесь result = 0
result= CryptReleaseContext(hCryptProv, 0);// здесь result = 0
hCryptProv = NULL;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);// здесь result = 0
result= CryptReleaseContext(hCryptProv, 0);// здесь result = 0
hCryptProv = NULL;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);// !!!!!здесь result = 1 !!!!
result= CryptReleaseContext(hCryptProv, 0);// !!!! здесь result = 1 !!!
hCryptProv = NULL;
result= CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);// !!!!!здесь result = 1 !!!!!
...
...
...
result = CryptImportKey (hCryptProv, (BYTE *)&sessKey[0], sessKeySize, hPublicKey, 0, &hSessionKey); // здесь валится result = 0
...
...
...
result= CryptReleaseContext(hCryptProv, 0);// !!!! здесь result = 1 !!!

Валится с ошибкой — плохая версия поставщика...

Я уже весь мозг себе ... Что за хрень такая!
43K
12 мая 2009 года
Flame_xXx
1 / / 01.10.2008
а чему у тебя &hCryptProv равен изначально в пятом блоке кода?
Посмотри ветку в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider
посмотри типы.. на всякий случай
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог