【问题标题】:Hard coded AES-256 key with WinCrypt & CryptImportKey带有 WinCrypt 和 CryptImportKey 的硬编码 AES-256 密钥
【发布时间】:2009-05-09 00:16:57
【问题描述】:

我需要让 Win32 应用程序加载硬编码的 AES-256 密钥,最好使用 WinCrypt.h 方法。我的密钥是无符号字符 [32],但我找不到要传递给 CryptImportKey 的密钥 blob 的正确格式。一切似乎都给了我无效的参数错误。有没有办法做到这一点?

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

【问题讨论】:

    标签: cryptography aes cryptoapi


    【解决方案1】:

    解决了。我使用了错误的 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*/}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2020-07-26
      相关资源
      最近更新 更多