이 코드를 사용하면 도움이 될 수 있습니까? 함수 AesDecrypt
을 호출하면 멈 춥니 다.Wincrypt 함수 호출로 프로그램이 중단됨
#include <iostream>
#include <Windows.h>
#include <wincrypt.h>
struct AesKey {
BLOBHEADER Header;
DWORD dwKeyLength;
BYTE cbKey[16];
AesKey() {
ZeroMemory(this, sizeof(*this));
Header.bType = PLAINTEXTKEYBLOB;
Header.bVersion = CUR_BLOB_VERSION;
Header.reserved = 0;
Header.aiKeyAlg = CALG_AES_128;
dwKeyLength = 16;
}
};
void AesDecrypt(unsigned char *output, unsigned char *input, int inLen, unsigned char *key, unsigned char *iv, int &plainSize) {
HCRYPTPROV provider;
AesKey rawKey;
HCRYPTKEY cKey;
BOOL hr = CryptAcquireContext(&provider, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0);
if (hr == FALSE)
throw "Unable to acquire AES Context";
for (int i = 0; i < 16; i++)
rawKey.cbKey[i] = key[i];
hr = CryptImportKey(provider, (BYTE *) &rawKey, sizeof(AesKey), NULL, 0, &cKey);
if (hr == FALSE)
throw "Unable to import given key";
hr = CryptSetKeyParam(cKey, KP_IV, (BYTE *) iv, 0);
if (hr == FALSE)
throw "Unable to set IV";
DWORD dwMode = CRYPT_MODE_CBC;
hr = CryptSetKeyParam(cKey, KP_MODE, (BYTE*) &dwMode, 0);
if (hr == FALSE)
throw "Unable to set mode";
memcpy(output, input, inLen);
DWORD d = (DWORD) inLen;
hr = CryptDecrypt(cKey, NULL, TRUE, 0, output, &d);
if (hr == FALSE)
{
int err = GetLastError();
throw "Error during Decryption";
}
plainSize = d;
}
// codigo generado por mi
int main(int argc, char** argv) {
unsigned char input[] = "SE83loTjmMeaG9+xoIyjng==";
unsigned char *pinput = input;
unsigned char output[] = "SE83loTjmMeaG9+xoIyjng==";
unsigned char *poutput = output;
unsigned char iv[] = "1234567890ABCDEF";
unsigned char *piv = iv;
unsigned char key[] = "1234567890ABCDEF";
unsigned char *pkey = key;
int plaInt;
AesDecrypt(poutput, pinput, 24, pkey, piv, plaInt);
std::cout << output << std::endl;
return 0;
}
함수를 호출 할 때 코드가 충돌합니다. 포인터를 전달하여 뭔가 잘못하고 있다고 생각합니다.
이 응용 프로그램이 비정상적인 방식으로 종료 할 런타임을 요청했습니다 '문자의 CONST *'
의 인스턴스를 던지는 후에 호출 종료합니다. 정보는 지원 팀에 문의하십시오.
-------------------------------- 반환 값으로 프로세스 종료 255 아무 키나 눌러 계속 진행하십시오. . .
를 사용하는 것을 의미했다. –