Wincrypt & Cryptimportkey를 사용한 하드 코딩 AES-256 키
-
20-08-2019 - |
문제
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*/}
제휴하지 않습니다 StackOverflow