| ||||
| ||||
Добрый день ! Ошибка заключается в следующем. Вызываю функцию CryptSetKeyParam с параметром dwParam = KP_SALT, предварительно вызвав функцию CryptGenRandom. В первую функцию передаю буфер с случайными данными и его длину. Флаги нулевые. Возвращается код ошибки NTE_BAD_TYPE, что, насколько я понимаю значит, что такого значения KP_SALT она не знает. С чем это может быть связано ? Код программы : HCRYPTPROV DescrptProv=0; HCRYPTHASH DiscrHash = 0; HCRYPTKEY hKey = 0; const char *CPar = "12345"; const char *VTInit = "54321"; DWORD RandLen=20; char *RandBuf; ... Инициализация крипропровайдера ... BOOL res; //Создаем объект хэширования CALG_GR3411 res = CryptCreateHash(DescrptProv, CALG_GR3411,0,0,&DiscrHash); if (!res) { strcpy(ErrMsg, "Ошибка -объекта !"); return -1; } //Помещаем в него данные - личный постояный пароль if (!CryptHashData(DiscrHash, (BYTE*)CPar,strlen(CPar),0)) { //Обработка ошибки } //Создание ключа по хэш-объекту CALG_G28147 if (!CryptDeriveKey(DescrptProv, CALG_G28147, DiscrHash, CRYPT_EXPORTABLE, &hKey)) { //Обработка ошибки } //Удаляем хэш-объект res = CryptDestroyHash(DiscrHash); if (!res) { //Обработка ошибки } //Запоминаем вектор инициализации res = CryptSetKeyParam(hKey,KP_IV, (BYTE*)VTInit, 0); if (!res) { //Обработка ошибки } //Генерируем "мусор" RandBuf = new char[RandLen+1]; RandBuf[RandLen] = ’\0’; res = CryptGenRandom(DescrptProv,RandLen,(BYTE*)RandBuf); if (!res) { //Обработка ошибки } //Изменяем пареметры ключа res = CryptSetKeyParam(hKey, KP_SALT, (BYTE*)RandBuf, 0); if (!res) { switch (GetLastError()) { case NTE_BAD_FLAGS: cout << "\nNTE_BAD_FLAGS";break; case NTE_BAD_TYPE: cout << "\nNTE_BAD_TYPE";break; case NTE_PERM: cout << "\nNTE_PERM";break; } } Ошибка вылетает при вызове последней функции. | ||||
Ответы: | ||||
| ||||
При использование CryptoPro CSP солт значение значение ключа вы не получите, т.к. его там нет. Солт - это открытые данные добавляемые к ключу. Их можно получить только для экспортных криптопровайдеров. | ||||
| ||||
При использование CryptoPro CSP солт значение значение ключа вы не получите, т.к. его там нет. Солт - это открытые данные добавляемые к ключу. Их можно получить только для экспортных криптопровайдеров. | ||||