12.03.2003 18:31:36проблемы с CryptGenKey, CryptExportKey, и CryptEncrypt! Ответов: 1
T-Jam
Может мне кто-нибудь объяснит что происходит когда я выполняю вот эту ф-ю:

CryptGenKey(hProv, AT_KEYEXCHANGE , 1024<<16, &hKey)

В MSDN-е написано, что генерится пара ключей, но если так то неужели вся эта пара запихивается в hKey у которого фактический тип unsigned long или сюда запихивается всетаки один ключ, тогда вопрос какой?

теперь второй вопрос

значение флага у меня 1024<<16, насколько я понял это должно означать что размер ключа будет равен 1024 бита, тоесть 128 байт, но после того как я делаю вот это

CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, pbKeyBlob, &dwKeyBlobLen)

то в dwKeyBlobLen у меня возращается значение 148, вопрос почему?

Теперь третий вопрос. Хочу закриптовать строку CString("Hello world")
пишу следующий код:

[code]


CString message("Hello world");
DWORD mesLen = message.GetLength();
DWORD outMesLen = 0;
//На всякий случай потомучто не знаю маусимальный размер блока
if(mesLen > 1000)
return CONST_EASYCRYPTO_ERROR_VERY_LONG_MESSAGE;

PBYTE pbBuffer = new BYTE[1013]; //тоже на всякий случай

if (!pbBuffer)
return CONST_EASYCRYPTO_ERROR_MEMMORY_ALLOCATION;

for (DWORD i = 0; i < mesLen; i++)
pbBuffer[i] = message.GetAt(i);
// pbBuffer[i] =&rsquo;\0&rsquo;;

if(!CryptEncrypt(
hKey,
0,
TRUE,
0,
pbBuffer,
&outMesLen,
sizeof(pbBuffer)))
{
DWORD error = GetLastError();
//Вылитаю на этой ошибке!
if (error == ERROR_MORE_DATA)
return -1;
}

[/code]


Функция CryptEncrypt вылетает с ошибкой ERROR_MORE_DATA, если меняю значение TRUE на FALSE то все нормально.
Не могу понять с чего это вдруг функция определила что есть еще данные и блок еще не последний? Объясните пожалуйста эту ситуацию!

Заранее спасибо!
 
Ответы:
13.03.2003 10:42:34kure
Посмотрите пример
http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=4