سؤال

أحتاج إلى تحميل تطبيق Win32 مفتاح AES-256 مشفرًا ، باستخدام طرق WinCrypt.h. لقد حصلت على مفتاحي في char غير موقعة [32] ولكن لا يمكنني العثور على التنسيق الصحيح لنقطة مفتاح لتمريرها إلى Cryptimportkey. يبدو أن كل شيء يعطيني أخطاء معلمة غير صالحة. هل هناك أي طريقة للقيام بذلك؟

(من المهم أيضًا كيفية تعيين الرابع في Wincrypt. لا أستطيع أن أرى كيفية القيام بذلك على الإطلاق)

هل كانت مفيدة؟

المحلول

حلها. كنت أستخدم Btype الخاطئ واستخدام 256 للتبني بدلاً من 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*/}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top