代码之家  ›  专栏  ›  技术社区  ›  Trevor

带Wincrypt和CryptImportKey的硬编码AES-256密钥

  •  3
  • Trevor  · 技术社区  · 16 年前

    我需要让一个win32应用程序加载一个硬编码的aes-256密钥,最好使用wincrypt.h方法。我有一个无符号字符[32]中的密钥,但找不到要传递给CryptImportKey的密钥blob的正确格式。一切似乎都给了我无效的参数错误。有什么办法吗?

    (同样重要的是如何在Wincrypt中设置IV。我根本不知道该怎么做)

    1 回复  |  直到 9 年前
        1
  •  9
  •   Uyghur Lives Matter    9 年前

    解决了它。我用了错误的btype,用256代替32作为keysize。

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