Это следующий вопрос из этого:
OpenSSL EVP_DecryptFinal_ex возвращает ошибку «неправильная конечная длина блока» при расшифровке файла
Я пытаюсь расшифровать файл. Сначала я читал его как файл ASCII вместо двоичного файла. После исправления (надеюсь) и чтения в двоичном виде я всегда получаю ошибку "bad decrypt"
:
15208:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto\evp\evp_enc.c:570:
Вот пример того, как я шифрую и дешифрую:
Шифрование:
Cipher cipher;
ifstream f("d:/test.YML");
ofstream out("d:/temp.YML");
byte key[KEY_SIZE] = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2};
byte iv[BLOCK_SIZE] = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6};
secure_string line;
secure_string temp;
while (getline(f, line)) {
cipher.Encrypt(key, iv, line, temp);
out << temp << endl;
}
Расшифровка:
Cipher cipher;
ifstream f("d:/temp.YML", ifstream::binary);
ofstream out("d:/tempDecrypt.YML");
byte key[KEY_SIZE] = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2};
byte iv[BLOCK_SIZE] = {1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6};
secure_string temp;
vector<char> buffer(1024, 0);
while (!f.eof()) {
f.read(buffer.data(), buffer.size());
streamsize dataSize = f.gcount();
secure_string chunk = { buffer.begin(), buffer.begin() + dataSize };
cipher.Decrypt(key, iv, chunk, temp);
}
Теперь я не уверен, с чего начать это расследование:
Есть ли проблема с шифрованием? Зашифрованный файл создан, я не вижу в этом ничего плохого.
Есть ли проблема с тем, как я читаю куски файла и расшифровываю их? Снова я не вижу проблемы здесь. (Ошибка на EVP_DecryptFinal_ex
)
Я также слышал, что может быть проблема с заполнением. Я не делаю ничего, связанного с отступом, поэтому не уверен, что это проблема.
Я использую ту же версию OpenSsl, в Windows у меня есть 2 проекта Visual Studio, поэтому не должно быть проблем с несовместимыми библиотеками OpenSsl.
Если у кого-то есть просьбы, дайте мне знать. Я никогда раньше не работал с шифрованием, поэтому некоторые вещи трудно понять.
PS: я не включил методы Encrypt
и Decrypt
, они такие же, как на сайте Openssl Wiki , дайте мне знать, если мне нужно.