1
이 함수에서 main 함수를 반환하면 내 프로그램이 예기치 않게 종료됩니다. 시스템 ("일시 중지")이 끝나면 enter 키를 누르면 프로그램에서 빠져 나오고 주 기능으로 돌아 가지 않습니다. 바라건대 누군가가 약간의 통찰력을 줄 수 있기를 바랍니다.반환 함수 크래시 - C++ Openssl
bool DecryptKeyWithCheckSum(unsigned char *userKey,unsigned char *ivec,std::string cipherStr,unsigned char *genKey)
{
//split cipher
std::string first16Cipher = cipherStr.substr(0,AES_KEY_SIZE);
std::string last16Cipher = cipherStr.substr(AES_KEY_SIZE,cipherStr.length()-1);
//convert back to char
char cipherChar1[AES_KEY_SIZE];
strcpy(cipherChar1,first16Cipher.c_str());
//convert back to char
char cipherChar2[AES_KEY_SIZE];
strcpy(cipherChar2,last16Cipher.c_str());
//convert to unsigned char
unsigned char cipher1[AES_KEY_SIZE];
memcpy(cipher1,reinterpret_cast<unsigned char*>(cipherChar1),AES_KEY_SIZE);
unsigned char cipher2[AES_KEY_SIZE];
memcpy(cipher2,reinterpret_cast<unsigned char*>(cipherChar2),AES_KEY_SIZE);
//set key
AES_KEY key;
AES_set_encrypt_key(userKey, 128, &key);
unsigned char oriKey[AES_KEY_SIZE];
unsigned char checksum[AES_KEY_SIZE];
int num1 = 0;
//decrypt cipher
AES_cfb128_encrypt(cipher1, oriKey, AES_BLOCK_SIZE, &key, ivec, &num1,AES_DECRYPT);
AES_cfb128_encrypt(cipher2, checksum, AES_KEY_SIZE, &key, ivec, &num1,AES_DECRYPT);
//generate hash checksum
unsigned char hashChecksum[AES_KEY_SIZE];
this->hashData_MD5(oriKey,AES_KEY_SIZE,hashChecksum);
//convert checksum into string to compare
char checksum1[AES_KEY_SIZE];
strncpy(checksum1,reinterpret_cast<const char*>(hashChecksum),AES_KEY_SIZE);
checksum1[AES_KEY_SIZE] = '\0';
std::string checksum1Str = checksum1;
//convert checksum into string to compare
char checksum2[AES_KEY_SIZE];
strncpy(checksum2,reinterpret_cast<const char*>(checksum),AES_KEY_SIZE);
checksum2[AES_KEY_SIZE] = '\0';
std::string checksum2Str = checksum2;
//compare last 16 & checksum
if(checksum1Str==checksum2Str)
{
//PROGRAM ABLE TO PRINT OUT THIS
cout << "Decrypt Key Return true" << endl;
system("pause");
return true;
}
else
{
cout << "Decrypt Key Return false" << endl;
system("pause");
return false;
}
}//end of function
int main()
{
//get user to enter password to decrypt password
unsigned char pass[AES_KEY_SIZE] = "password";
unsigned char tempKey[AES_KEY_SIZE];
//generate random key
unsigned char ckey[AES_KEY_SIZE];
this->generateRandomNum(ckey,AES_KEY_SIZE);
this->generateRandomNum(ivec,AES_IV_SIZE);
std::string cipherStr;
EncryptKeyWithCheckSum(pass,IV2,ckey,cipherStr);
if(DecryptKeyWithCheckSum(pass,IV,cipherStr,tempKey)==true)
{
//BEFORE PRINTING OUT THIS, THE PROGRAM CRASHES UNEXPECTEDLY
cout << "TRUE" << endl;
system("pause");
}
else
{
cout << "False" << endl;
system("pause");
}
}
그래서 내가 할 다음 .. 내가 char checksum1 [AES_KEY_SIZE +1] 대신 선언해야합니다? // 체크섬을 비교할 문자열로 변환 char checksum1 [AES_KEY_SIZE]; strncpy (checksum1, reinterpret_cast (hashChecksum), AES_KEY_SIZE); checksum1 [AES_KEY_SIZE] = '\ 0'; std :: string checksum1Str = checksum1; –
mister
지적 해 주셔서 감사합니다! 나는 다소 비슷한 실수를했다는 생각이 들었다. – mister