Chave AES-256 de codificação dura com Wincrypt & CryptimportKey
-
20-08-2019 - |
Pergunta
Preciso ter um aplicativo Win32 carregar uma chave AES-256 de codificação dura, idealmente usando os métodos wincrypt.h. Eu tenho minha chave em um char não assinado [32], mas não consigo encontrar o formato correto de uma bolha -chave para passar para o CryptImportKey. Tudo parece me dar erros de parâmetros inválidos. Há alguma maneira de fazer isso?
(Também importante é como definir IV no Wincrypt. Não consigo ver como fazer isso)
Solução
Resolvi-o. Eu estava usando o Btype errado e usando 256 para Keysize em vez de 32.
BYTE myPrivateKey[] =
{1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30,
31,32};
BYTE myIV[] =
{1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16};
struct aes256keyBlob
{
BLOBHEADER hdr;
DWORD keySize;
BYTE bytes[32];
} blob;
blob.hdr.bType = PLAINTEXTKEYBLOB;
blob.hdr.bVersion = CUR_BLOB_VERSION;
blob.hdr.reserved = 0;
blob.hdr.aiKeyAlg = CALG_AES_256;
blob.keySize = 32;
memcpy(blob.bytes, myPrivateKey, 32);
HCRYPTKEY hKey;
if (CryptImportKey(hCryptProv, (BYTE*)&blob, sizeof(aes256keyBlob), NULL, 0, &hKey))
{
if(CryptSetKeyParam(hKey, KP_IV, myIV, 0))
{
//do decryption here
}
else{/*error*/}
CryptDestroyKey(hKey);
}
else{/*error*/}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow