Pregunta

Necesito que una aplicación Win32 cargue una tecla AES-256 codificada, idealmente utilizando los métodos WinCrypt.H. Tengo mi llave en un char [32] sin firmar [32], pero no puedo encontrar el formato correcto de un blob clave para pasar a CryptimportKey. Todo parece darme errores de parámetros no válidos. ¿Hay alguna forma de hacer esto?

(También importante es cómo establecer IV en Wincrypt. No puedo ver cómo hacerlo)

¿Fue útil?

Solución

Resuelto. Estaba usando el Btype incorrecto y usando 256 para teclas en lugar 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top