Проблемы с шифровкой файла

174
14 января 2018, 05:30

Недавно я уже задавал несколько вопросов по моей программе-шифровщику, но теперь у меня появился новый (уже окончательный) вопрос. Дело в том, что последний этап моей программы - шифрование файлов с помощью XOR. Мой алгоритм прост:

  1. Беру файл (через контекстное окно проводника).
  2. Создаю QBitArray для уже взятого файла и помещаю его туда.
  3. Беру путь и имя для нового файла (как в 1-ом).
  4. Создаю QBitArray, вмещающий в себя пароль.
  5. По 1 байту применяю операцию XOR.
  6. Сохраняю результат.

В итоге зашифрованное изображение PNG не открылось. Однако не открылось оно и после расшифровки! А именно: "Фатальная ошибка при чтении файла изображения формата PNG:I[D4][8B][E5]: invalid chunk type".

Привожу код программы и подписанный скриншот:

Код (нажатие кнопок "открыть" и "сохранить"):

#include "file.h"
#include "ui_file.h"
#include <QFile>
#include <QFileDialog>
#include <QTextStream>
QByteArray opened;
File::File(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::File)
{
    ui->setupUi(this);
}
File::~File()
{
    delete ui;
}
void File::on_pushButton_clicked()
{
    opened.clear();
    QString pass = QFileDialog::getOpenFileName(0, "Выберите файл: ", "", "");
    QFile file(pass);
    ui->textEdit->append(pass);
    if ((file.exists())&&(file.open(QIODevice::ReadOnly)))
    {
        opened = file.readAll();
        file.close();
    }
}
void File::on_pushButton_2_clicked()
{
    QString text = ui->textEdit->toPlainText();
    QByteArray key = text.toUtf8();
    for (int i = 0; i < opened.length(); i ++)
    {
        opened [i] = key [i % key.length()] xor opened [i];
    }
    QString pass = QFileDialog::getSaveFileName(0, "Выберите имя и путь файла: ", "", "");
    QFile file(pass);
    if(file.open(QIODevice::WriteOnly))
    {
        file.write(opened);
        file.close();
    }
}

Скриншот:

READ ALSO
Как отправить RakNet пакет и получить ответ?

Как отправить RakNet пакет и получить ответ?

Нужно отправить пакет (под видом клиента) на сервер Minecraft PE и получить ответНашел статью на вики, описывающую взаимодействия клиента и сервера,...

407
Сортировка вставками C++(std::vector&lt;int&gt;)

Сортировка вставками C++(std::vector<int>)

Сортирую интовый вектор, не мог понять как происходит выход за границы массивы, вот код:

199
Свой список C++

Свой список C++

Есть список MyListМне нужно чтобы в методе addItem вызывался копирующий конструктор класса у объекта переданного в метод addItem, а не только класса...

188
C++ Класс Binary перегрузка оператора &ldquo;+&rdquo;

C++ Класс Binary перегрузка оператора “+”

У меня задание реализовать класс Binary и перегрузить в классе оператор +Я это реализовал, но при выводе выдает неправильный результат

242