2015-05-28 4 views
0

Использование Crypto32 Windows, функция CryptoImportKey не работает в Windows 8.1, возвращая ERROR_INVALID_PARAMETER. Он хорошо работал со всеми предыдущими версиями Windows.CryptImportKey не работает в Windows 8

У кого-нибудь есть намек на это?

Код:

if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, 0)) 
{ 
    dwResult = GetLastError(); 
    if (dwResult == NTE_BAD_KEYSET) 
    { 

     if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET)) 
     { 
      dwResult = GetLastError(); 
      strAux.Format("Error [%x]: CryptAcquireContext() failed.",dwResult); 
      AfxMessageBox( strAux, MB_OK); 
      return; 
     } 
    } else { 
     dwResult = GetLastError(); 
     strAux.Format("Error [0x%x]: CryptAcquireContext() SECOND failed.",dwResult); 
     AfxMessageBox( strAux, MB_OK); 
     return; 
    } 
} 

if (pbBlob != NULL) 
{ 
    //Porto 02-07-2014 
    *(DWORD *)(pbBlob + 0x14) = 0; // Set the packed key length to zero 

    if (!CryptImportKey(hProv, pbBlob, cbBlob, 0, 0, &hSessionKey)) 
    { 
     dwResult = GetLastError(); 
     strAux.Format("Error [%x]: CryptImportKey() failed.Size: %d",dwResult,cbBlob); 
     AfxMessageBox( strAux, MB_OK); 
     return; 
    } 
} else { 
    if (!CryptImportKey(hProv, PrivateKeyWithExponentOfOne, sizeof(PrivateKeyWithExponentOfOne), 0, 0, &hKey)) 
    { 
     strAux.Format("Error [%x]: CryptImportKey() PRIVATE failed.",dwResult); 
     AfxMessageBox( strAux, MB_OK); 
     return; 
    } 
+0

Пожалуйста, продемонстрируйте код, который вы используете. В частности, как вы открываете контейнер. – jww

ответ

0

Существует ошибка в described here. Ключи, экспортируемые из Windows 7, не могут быть импортированы в Windows 8.1.

Это сообщение в блоге описывает обходное решение. В OPAQUEKEYBLOB, установите параметр типа DWORD со смещением 0x14 нулю:

*(DWORD *)(lpBlob + 0x14) = 0; // Set the packed key length to zero 

Это позволяет ключ для Windows 7, которые будут импортированы в ОС Windows 8.1.

+0

Это не работает для моего дела. Я уже создаю и импортирую ключ в ту же систему Windows 8.1. Благодарю. Хосе Порту –

 Смежные вопросы

  • Нет связанных вопросов^_^