Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline legioners  
#1 Оставлено : 5 декабря 2008 г. 23:32:58(UTC)
legioners

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.10.2008(UTC)
Сообщений: 2
Откуда: Санкт-Петербург

Здравствуйте, мне нужно получить дескриптор ключевой пары чтоб потом ее экспортировать.У меня следующая проблема - при вызове данной функции CryptGetUserKey() она возвращает ошибку что один из параметров не правильный. Криптопровайдер загружен, к контейнеру есть доступ. Вот мой код:
HINSTANCE hLib,hLib2; // дескриптор библиотеки
HCRYPTPROV hProv = 0; //перменная содержащая адрес криптопровайдера
char* pszContainer = "FAT12\\1019BDFA\\7c324763.000\\762B"; //путь до контейнера
unsigned long int Error; // ошибка функции CPAcquireContex
BYTE *pbKeyBlob = 0;
HCRYPTKEY phKey = 0;
HCRYPTKEY hExpKey = 0;
DWORD dwBlobLen;

VTableProvStruc vTable;

vTable.Version = 3;
vTable.FuncVerifyImage = NULL;
vTable.FuncReturnhWnd = NULL;
vTable.dwProvType = 1;
vTable.pszProvName = "Crypto-Pro Cryptographic Service Provider";
hLib = LoadLibrary("cpcspi.dll");
pbKeyBlob = new BYTE[300];
dwBlobLen = 300;
if (hLib != NULL)
{
if(CPAcquireContext = (CPAcquireContext_t) GetProcAddress(hLib, "CPAcquireContext"))
printf("Function CPAcquireContext successfuly uploaded.\n");

if(CPReleaseContext = (CPReleaseContext_t) GetProcAddress(hLib, "CPReleaseContext"))
printf("Function CPReleaseContext successfuly uploaded.\n");

if( CPAcquireContext(&hProv, pszContainer, NULL, &vTable) == TRUE)
printf("Cryptographic provider was acquired.\n");
else
printf("ERROR!Cryptographic provider was not acquired.\n");
// AT_KEYEXCHANGE
// AT_SIGNATURE
if( CryptGetUserKey(hProv,AT_SIGNATURE,&phKey) == TRUE)
printf("Key was taken.");
else
printf("Error while taking key hadle(CryptGetUserKey()).\n");
//if(!CryptExportKey(phKey, NULL, (DWORD)PRIVATEKEYBLOB, 0,(BYTE*)pbKeyBlob,&dwBlobLen))
// printf("Error %d during CryptExportKey!\n", GetLastError());
//if(!CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, NULL, &dwBLen))
Error = GetLastError();
//printf("Error = %d\n",Error);
Offline Максим Коллегин  
#2 Оставлено : 6 декабря 2008 г. 4:08:17(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,392
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 715 раз в 620 постах
А чем уровень Cryptxxx не устраивает?
Хэндлы уровня CP несовместимы с Crypt по определению.
В контейнере обычно ключ AT_KEYEXCHANGE - нужно проверять оба, хотя задача непонятна.

Отредактировано пользователем 6 декабря 2008 г. 4:09:16(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.