Hej, ucząc się Qt napisałem kolejny prosty okienkowy program, myślę że tytuł pytania wszystko mówi czym się on zajmuje:
szyfrowanie prostych plików tekstowych przebiega bez problemu:
oto najważniejsze metody programu:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
#include <QFile>
#include <QFileDialog>
#include <QMessageBox>
#include <QString>
#include <QTextStream>
//---------------------------------------------------------------------------
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
//---------------------------------------------------------------------------
MainWindow::~MainWindow()
{
delete ui;
}
//---------------------------------------------------------------------------
void MainWindow::on_saveButton_clicked()
{
QString file_name = QFileDialog::getOpenFileName(
this,
"open file",
QDir::homePath()
);
QFile file(file_name);
if(!file.open(QFile::WriteOnly | QFile::Text)){
QMessageBox::warning(this, "error", "File is not open");
}
else {
QTextStream in(&file);
QString text = ui->fileTextEdit->toPlainText();
in << text;
file.close();
}
}
//---------------------------------------------------------------------------
void MainWindow::on_readButton_clicked()
{
QString file_name = QFileDialog::getOpenFileName(
this,
"open file",
QDir::homePath()
);
QFile file(file_name);
if(!file.open(QFile::ReadOnly | QFile::Text)){
QMessageBox::warning(this, "error", "File is not open");
}
else {
QTextStream in(&file);
QString text = in.readAll();
ui->fileTextEdit->setPlainText(text);
file.close();
}
}
//---------------------------------------------------------------------------
void incrementKeyIterator(const QString& str, int& it) {
if(it == str.size()-1)
it = 0;
else
++it;
}
void MainWindow::on_xorButton_clicked()
{
QString text = ui->fileTextEdit->toPlainText();
QString key = ui->keyLineEdit->text();
if(text=="" || key=="") {
QMessageBox::warning(this, "error", "File or key is empty");
}
else {
int it = 0;
for(int i=0; i<text.size(); ++i){
unsigned short ccode1 = text[i].unicode();
unsigned short ccode2 = key[it].unicode();
int result = ccode1^ccode2;
text[i] = result;
incrementKeyIterator(key,it);
}
ui->fileTextEdit->setPlainText(text);
}
}
//---------------------------------------------------------------------------
Problem jest taki że o ile praca na plikach *.txt przebiega poprawnie to juz inaczej jest w przypadku np. zdjęć. Nawet po samym otwarciu takiego pliku w moim programie i zapisaniu go z powrotem ( bez żadnej modyfikacji/szyfrowania ) otrzymuje:
Nie wiem do końca w czym jest problem, może z kodowaniem, może ze znakiem końca pliku który jest usuwany, a może modyfikacja powinna przebiegać w trybie binarnym... Bardzo wam z góry dziękuje za pomoc i wskazanie możliwej przyczyny problemu. Pozdrawiam :)