2009-05-09 11 views
2

Ich muss eine Win32-Anwendung einen fest codierten AES-256-Schlüssel laden, idealerweise mit den WinCrypt.h-Methoden. Ich habe meinen Schlüssel in einem unsigned char [32], aber ich kann das korrekte Format eines Schlüsselblobs nicht finden, um CryptImportKey zu übergeben. Alles scheint mir ungültige Parameterfehler zu geben. Gibt es eine Möglichkeit, dies zu tun?Hartcodierter AES-256-Schlüssel mit WinCrypt & CryptImportKey

(Wichtig ist auch, wie IV in WinCrypt setzen. Ich kann nicht sehen, wie das überhaupt zu tun)

+0

Es könnte hilfreich sein, den Code zu veröffentlichen, den Sie verwenden. – Tadmas

Antwort

7

es gelöst. Ich verwendete den falschen bType und 256 für keySize anstelle von 32 verwenden.

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*/}