DmitriyB Опубликовано 31 Августа 2016 Жалоба Поделиться Опубликовано 31 Августа 2016 Добрый день! Не получается создать ключ на основе данных пользователя, ключ создается для шифрования ГОСТ 28147 89 (CPCSP_ENCRYPT_ID), используемые данные пользователя - результат действия хэш-функции ГОСТ Р 34.11-2012 (CSP_HASH_2012_256BIT_ID). Причем при использовании хэш функции ГОСТ Р 34.11-94 (CPCSP_HASH_ID) создание ключа проходит корректно. Привожу код своей программы. Архив всего проекта - в приложении. // Генерация ключа шифрования на основе хэша пароля #include "importitccsp.h" #include <string> void HandleError(char* s); int main() { HCRYPTPROV hCryptProv = 0; HCRYPTHASH hHash = 0; HCRYPTKEY hKey = 0; BYTE password[] = { 0, 1, 2, 3, 4, 5, 6 }; ALG_ID hashIds[] = { CPCSP_HASH_ID, CSP_HASH_2012_256BIT_ID, CPCSP_HASH_ID }; DWORD dwData = 0; DWORD dwLen = 0; if( !CryptAcquireContext( &hCryptProv, NULL, VPN_DEF_PROV, VPN_PROV_TYPE, CRYPT_VERIFYCONTEXT ) ) { HandleError("Error during CryptAcquireContext."); } for( int i = 0; i < sizeof(hashIds)/sizeof(ALG_ID); i++ ) { printf( "Hash ID: 0x%X\n", hashIds[i] ); if( !CryptCreateHash( hCryptProv, hashIds[i], 0, 0, &hHash ) ) { HandleError("Error during CryptCreateHash."); goto next_iter; } if( !CryptHashData( hHash, password, sizeof(password), 0 ) ) { HandleError("Error during CryptHashData."); goto next_iter; } if( !CryptDeriveKey( hCryptProv, CPCSP_ENCRYPT_ID, hHash, 0, &hKey ) ) { HandleError("Error during CryptDeriveKey."); goto next_iter; } dwLen = sizeof(DWORD); if( !CryptGetKeyParam( hKey, KP_KEYLEN, (BYTE*)(&dwData), &dwLen, 0 ) ) { HandleError("Error during CryptGetKeyParam."); goto next_iter; } printf( "Key correct, length = %u\n", dwData ); next_iter: if( hHash ) CryptDestroyHash( hHash ); if( hKey ) CryptDestroyKey( hKey ); } CryptReleaseContext( hCryptProv, 0 ); return 0; } void HandleError(char *s) { DWORD err = GetLastError(); printf("Error number : 0x%x\n", err); printf("Error description: %s\n", s); } Вывод программы: Hash ID: 0x801E Key correct, length = 256 Hash ID: 0x8021 Error number : 0x80090027 Error description: Error during CryptDeriveKey. Hash ID: 0x801E Key correct, length = 256 Окружение - Win7 x64, установлен ViPNet_CSP_RUS_4.2.2.36190. Помогите пожалуйста разобраться, с чем связано получение этой ошибки. С уважением, Дмитрий test_vipnet.7z Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
BRV Опубликовано 7 Сентября 2016 Жалоба Поделиться Опубликовано 7 Сентября 2016 Дмитрий, добрый день! В настоящее время код создания производных ключей не работает для новых алгоритмов. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
a.mezhov Опубликовано 28 Ноября 2018 Жалоба Поделиться Опубликовано 28 Ноября 2018 On 9/7/2016 at 8:25 PM, BRV said: Дмитрий, добрый день! В настоящее время код создания производных ключей не работает для новых алгоритмов. Здравствуйте. Реализована ли данная функциональность на данный момент? (v4.2.10.51307) Если нет, то когда планируется? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.