| ||||
| ||||
Может мне кто-нибудь объяснит что происходит когда я выполняю вот эту ф-ю: 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] =’\0’; 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 то все нормально. Не могу понять с чего это вдруг функция определила что есть еще данные и блок еще не последний? Объясните пожалуйста эту ситуацию! Заранее спасибо! | ||||
Ответы: | ||||
| ||||
Посмотрите пример http://www.cryptopro.ru/CryptoPro/forum/myforum.asp?q=4 | ||||