2009-05-09 9 views
2

J'ai besoin d'une application Win32 pour charger une clé codée en dur AES-256, idéalement en utilisant les méthodes WinCrypt.h. J'ai ma clé dans un char non signé [32] mais je ne peux pas trouver le format correct d'un blob de clé à passer à CryptImportKey. Tout semble me donner des erreurs de paramètres invalides. Est-ce qu'il y a un moyen de faire ça?Clé AES-256 codée en dur avec WinCrypt & CryptImportKey

(Il est également important comment définir IV WinCrypt. Je ne vois pas comment faire du tout)

+0

Il pourrait être utile de poster le code que vous utilisez. – Tadmas

Répondre

7

a résolu le problème. J'utilisais le mauvais bType et en utilisant 256 pour keySize au lieu 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*/} 
Questions connexes