Я закодирован текстовый файл, используя openssl
следующим образом:Первые 16 байт испорченные при расшифровке с использованием AES
openssl enc -nosalt -aes-128-cbc -k mypass -in "test.txt" -out "test_enc.txt" -p
и возвращает ключ и IV следующим образом:
key=A029D0DF84EB5549C641E04A9EF389E5
iv =A10CE9C4682486F8622F2F18E7291367
и вот код Я использовал для decryp файл:
int main() {
streampos size;
char * indata;
ifstream file ("test_enc.txt", ios::in|ios::binary|ios::ate);
ofstream outfile ("test_decoded.txt",std::ofstream::binary);
if (file.is_open())
{
size = file.tellg();
indata = new char [size];
file.seekg (0, ios::beg);
file.read (indata, size);
file.close();
unsigned char* outdata=new unsigned char [size];
unsigned char ckey[] = "\xA0\x29\xD0\xDF\x84\xEB\x55\x49\xC6\x41\xE0\x4A\x9E\xF3\x89\xE5";
unsigned char ivec[] = "\xA1\x0C\xE9\xC4\x68\x24\x86\xF8\x62\x2F\x2F\x18\xE7\x29\x13\x67";
AES_KEY key;
AES_set_decrypt_key(ckey, 256, &key);
AES_cbc_encrypt((unsigned char*) indata, outdata, size, &key, ivec, AES_DECRYPT);
outfile.write ((char*) outdata,size);
delete[] indata;
delete[] outdata;
}
else{
cout << "Unable to open file";
cerr << "Error: " << strerror(errno);
}
outfile.close();
file.close();
return 0;
}
Этот код работает отлично. Однако, когда я использую соль при кодировании, как показано в следующей команде:
openssl enc -aes-128-cbc -k mypass -in "test.txt" -out "test_enc.txt" -p
и соответственно заменить ключ и ivec в коде, весь файл правильно расшифрованы, но первые 16 байт! Что я узнал из других сообщений с похожими проблемами, я знаю, что значение iv неверно, но я не знаю, что должно быть правильным значением iv. Я использую только ключ и iv значение возврата после шифрования, и я также не учитываю значение соли (на самом деле я не знаю, как это сделать). Какое должно быть правильное значение iv?
Это определенно утечка памяти, я исправил это в коде сейчас. Но я не думаю, что коррупция была вызвана этим. Я не верю, что это проблема с повреждением памяти, а неправильное дешифрование, потому что я пропускаю что-то на этапе дешифрования. Коррупция происходит только тогда, когда соль добавляется при шифровании и исправлении утечки памяти тоже не помогло, первые 16 байтов все еще повреждены! – user2219907