문제

Win32 애플리케이션을로드해야 하드 코딩 된 AES-256 키를로드해야합니다. 서명되지 않은 숯 [32]에 내 키가 있었지만 Cryptimportkey로 전달할 키 블로브의 올바른 형식을 찾을 수 없습니다. 모든 것이 유효하지 않은 매개 변수 오류를주는 것 같습니다. 이것을 할 방법이 있습니까?

(또한 윈드 크리트에서 IV를 설정하는 방법도 중요합니다. 전혀 그렇게하는 방법을 알 수 없습니다)

도움이 되었습니까?

해결책

그것을 해결했습니다. 나는 잘못된 btype를 사용하고 있었고 32 대신 Keysize에 256을 사용하고있었습니다.

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