Как создать постоянный ключ AES с помощью Crypto API Next Generation в Windows 7

В Windows 7 Pro x64 я пытаюсь создать постоянный ключ AES с помощью Cryptography API Next Generation.

Проблема в том, что функция NCryptCreatePersistedKey возвращает NTE_NOT_SUPPORTED.

Мой код:

#include "Windows.h"#include "bcrypt.h"#include "ncrypt.h"
int main() {

NCRYPT_PROV_HANDLE hProvider;
NCRYPT_KEY_HANDLE hKey;

// Open storage provider
HRESULT status = NCryptOpenStorageProvider(&hProvider,
MS_KEY_STORAGE_PROVIDER, 0);

// Get stored cipher key
status = NCryptOpenKey(hProvider, &hKey, L"test-key", 0, 0);

// Create key if it doesn't exist
if (status == NTE_BAD_KEYSET) {
status = NCryptCreatePersistedKey(hProvider, &hKey,
BCRYPT_AES_ALGORITHM, L"test-key", 0, 0);
status = NCryptFinalizeKey(hKey, 0);
}

return 0;
}

Это работает на Windows 10 Pro x64.

А в документации сказано, что минимально поддерживаемым клиентом является Windows Vista …

Спасибо за вашу помощь.

0

Решение

MS_KEY_STORAGE_PROVIDER не поддерживает AES или 3DES в Windows 7, эта функция была добавлена ​​в 8 или 8.1. Лучший источник, который я могу найти для этого некоторое тестовое состояние для .NET Core. С другой стороны, вы можете пойти по wincrypt.h:

#if (NTDDI_VERSION >= NTDDI_WIN8)
#define NCRYPT_AES_ALGORITHM            BCRYPT_AES_ALGORITHM
#define NCRYPT_RC2_ALGORITHM            BCRYPT_RC2_ALGORITHM
#define NCRYPT_3DES_ALGORITHM           BCRYPT_3DES_ALGORITHM
#define NCRYPT_DES_ALGORITHM            BCRYPT_DES_ALGORITHM
#define NCRYPT_DESX_ALGORITHM           BCRYPT_DESX_ALGORITHM
#define NCRYPT_3DES_112_ALGORITHM       BCRYPT_3DES_112_ALGORITHM

#define NCRYPT_SP800108_CTR_HMAC_ALGORITHM  BCRYPT_SP800108_CTR_HMAC_ALGORITHM
#define NCRYPT_SP80056A_CONCAT_ALGORITHM    BCRYPT_SP80056A_CONCAT_ALGORITHM
#define NCRYPT_PBKDF2_ALGORITHM             BCRYPT_PBKDF2_ALGORITHM
#define NCRYPT_CAPI_KDF_ALGORITHM           BCRYPT_CAPI_KDF_ALGORITHM
#endif // (NTDDI_VERSION >= NTDDI_WIN8)

NCRYPT-версии #defines не существовали до Windows 8, предполагая, что API-интерфейсы NCrypt (постоянный ключ) не ожидали выполнения AES до Windows 8.

0

Другие решения

Других решений пока нет …