Жестко закодированный ключ AES-256 с WinCrypt & CryptImportKey - PullRequest
3 голосов
/ 09 мая 2009

Мне нужно, чтобы приложение Win32 загружало жестко закодированный ключ AES-256, в идеале с использованием методов WinCrypt.h. У меня есть ключ в неподписанном символе [32], но я не могу найти правильный формат ключевого объекта для передачи в CryptImportKey. Все, кажется, дает мне недопустимые ошибки параметров. Есть ли способ сделать это?

(Также важно, как установить IV в WinCrypt. Я вообще не вижу, как это сделать)

1 Ответ

11 голосов
/ 11 мая 2009

Решил это. Я использовал неправильный bType и использовал 256 для keySize вместо 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*/}
...