Как проверить правильность введенного пароля при шифровании ботана

У меня есть код для шифрования и дешифрования файла, код работает хорошо, но проблема в том, что, когда я пытаюсь расшифровать файл с неправильным паролем, вместо сообщения об ошибке, дешифрование выполняется, в результате чего файл отличается от исходный файл. Можно ли проверить, совпадает ли пароль, введенный в расшифровке, с шифрованием?

void AES::Encrypt(SymmetricKey key, InitializationVector iv, string inFilename,  string outFilename)
{
ifstream in(inFilename.c_str(),std::ios::binary);
ofstream out(outFilename.c_str(),std::ios::binary);

QFile* file = new QFile(inFilename.c_str());

qint64 size = file->size();
qint64 i = 0;
percent = -1;

Pipe pipe(get_cipher("AES-256/CBC", key, iv,ENCRYPTION),new DataSink_Stream(out));
pipe.start_msg();
SecureBuffer<byte, 4096> buffer;
while(in.good())
{
in.read((char*)&buffer[0], buffer.size());
const size_t got_from_infile = in.gcount();
pipe.write(buffer, got_from_infile);
i += got_from_infile;
int p = ((i * 100) / size);
if (p != percent)
{
percent = p;
emit progress(percent);
}
if(in.eof()) pipe.end_msg();
while(pipe.remaining() > 0)
{
const size_t buffered = pipe.read(buffer, buffer.size());
out.write((const char*)&buffer[0], buffered);
}
}
out.flush();
out.close();
in.close();

qDebug() << "Encrypted!";
}

void AES::Decrypt(SymmetricKey key, InitializationVector iv, string inFilename,  string outFilename)
{
ifstream in(inFilename.c_str(),std::ios::binary);
ofstream out(outFilename.c_str(),std::ios::binary);

QFile* file = new QFile(inFilename.c_str());

qint64 size = file->size();
qint64 i = 0;
percent = -1;

Pipe pipe(get_cipher("AES-256/CBC", key, iv,DECRYPTION),new DataSink_Stream(out));
pipe.start_msg();
SecureBuffer<byte, 4096> buffer;
while(in.good())
{
in.read((char*)&buffer[0], buffer.size());
const size_t got_from_infile = in.gcount();
pipe.write(buffer, got_from_infile);
i += got_from_infile;
int p = ((i * 100) / size);
if (p != percent)
{
percent = p;
emit progress(percent);
}
if(in.eof()) pipe.end_msg();
while(pipe.remaining() > 0)
{
const size_t buffered = pipe.read(buffer, buffer.size());
out.write((const char*)&buffer[0], buffered);
}
}
out.flush();
out.close();
in.close();

qDebug() << "Decrypted!";
}

1

Решение

При шифровании сначала добавьте к его концу хэш всего содержимого незашифрованного файла, а затем зашифруйте новый файл. Таким образом, зашифрованный файл будет на несколько байтов больше, чем незашифрованный файл.

После расшифровки сначала убедитесь, что хеш в конце действителен, а затем удалите его из файла, чтобы получить исходное содержимое.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector