-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmainwindow.cpp
More file actions
166 lines (131 loc) · 5.42 KB
/
mainwindow.cpp
File metadata and controls
166 lines (131 loc) · 5.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle(QString::fromLocal8Bit("自制加密解密软件"));
//连接
connect(ui->pushButtonChoose,SIGNAL(clicked(bool)),this,SLOT(chooseFileSlot()));//选择加密文件
connect(ui->pushButtonDecryptToFile,SIGNAL(clicked(bool)),this,SLOT(saveToFileSlot()));//保存解密文件
connect(ui->pushButtonEncrypt,SIGNAL(clicked(bool)),this,SLOT(encryptSlot()));//加密
connect(ui->pushButtonDecrypt,SIGNAL(clicked(bool)),this,SLOT(decryptSlot()));//解密
connect(ui->actionConfig,SIGNAL(triggered(bool)),this,SLOT(configKeySlot())); //设置密匙
connect(ui->comboBoxCode,SIGNAL(currentTextChanged(QString)),this,SLOT(chooseCodeSlot(QString)));
//设置编码
if(ui->comboBoxCode->currentText()=="LOCAL")
textcodec=QTextCodec::codecForLocale();
else
textcodec=QTextCodec::codecForName(ui->comboBoxCode->currentText().toStdString().c_str());
}
MainWindow::~MainWindow()
{
delete ui;
}
//******************************************************slots
/*选择加密文件*/
void MainWindow::chooseFileSlot()
{
//得到最近打开文件的路径
QSettings *setting=new QSettings(KEY_FILE,QSettings::IniFormat);
setting->setIniCodec("UTF8");
QString lastPath=setting->value(QString(GLOBAL_SECTION).append("/").append(LAST_OPEN_PATH)).toString();
if(lastPath.isEmpty()) lastPath=QDir::currentPath();
QString path=QFileDialog::getOpenFileName(this,"",lastPath);
if(path.isEmpty()) return ;
ui->lineEditPath->setText(path);
/*将最近打开文件路径保存,方便下次打开*/
setting->setValue(QString(GLOBAL_SECTION).append("/").append(LAST_OPEN_PATH),path);
delete setting;
chooseCodeSlot(ui->comboBoxCode->currentText());
}
/*加密*/
void MainWindow::encryptSlot()
{
//读取文件得到密匙
QSettings *setting=new QSettings(KEY_FILE,QSettings::IniFormat);
setting->setIniCodec("UTF8");
QString key1=setting->value(QString(KEY_SECTION).append("/").append(KEY_KEY1)).toString();
QString key2=setting->value(QString(KEY_SECTION).append("/").append(KEY_KEY2)).toString();
// if(key1.isEmpty()) key1="1111";
// if(key2.isEmpty()) key2="1111";
delete setting;
crypt.setKeys(key1.toInt(),key2.toInt());
QString enText=ui->textEditEncrypt->toPlainText();
QString afterEncrypt=QString::fromStdString(crypt.EnCrypt(textcodec->fromUnicode(enText).data()));
ui->textEditDecrypt->setText(afterEncrypt);
}
/*解密*/
void MainWindow::decryptSlot()
{
//读取文件得到密匙
QSettings *setting=new QSettings(KEY_FILE,QSettings::IniFormat);
setting->setIniCodec("UTF8");
QString key1=setting->value(QString(KEY_SECTION).append("/").append(KEY_KEY1)).toString();
QString key2=setting->value(QString(KEY_SECTION).append("/").append(KEY_KEY2)).toString();
// if(key1.isEmpty()) key1="1111";
// if(key2.isEmpty()) key2="1111";
delete setting;
crypt.setKeys(key1.toInt(),key2.toInt());
QString deText=ui->textEditEncrypt->toPlainText();
QString afterDecrypt=textcodec->toUnicode(crypt.DeCrpty(deText.toStdString()).c_str());
//QMessageBox::information(this,"",afterDecrypt);
ui->textEditDecrypt->setText(afterDecrypt);
}
/*输出到文件*/
void MainWindow::saveToFileSlot()
{
QString srcDir=ui->lineEditPath->text();
if(srcDir.isEmpty())
srcDir="test.txt";
QFileInfo finfo(srcDir);
QString saveTo=QFileDialog::getSaveFileName(this,"",finfo.absolutePath()+"/"+finfo.baseName()+"_crypt."+finfo.suffix());
if(saveTo.isEmpty()) return ;
QFile file(saveTo);
if(!file.open(QIODevice::ReadWrite|QIODevice::Truncate|QIODevice::Text))
{
QMessageBox::information(this,"",QString::fromLocal8Bit("打开保存文件失败!"));
return ;
}
QTextStream out(&file);
out.setCodec(textcodec);
out<<ui->textEditDecrypt->toPlainText();
//file.write(textcodec->fromUnicode(ui->textEditDecrypt->toPlainText()).data());
//file.write(ui->textEditDecrypt->toPlainText().toStdString().c_str());
file.close();
QSettings *setting=new QSettings(KEY_FILE,QSettings::IniFormat);
setting->setIniCodec("UTF8");
setting->setValue(QString(GLOBAL_SECTION).append("/").append(LAST_SAVE_PATH),saveTo);
setting->setValue(QString(GLOBAL_SECTION).append("/").append(LAST_CODE),ui->comboBoxCode->currentText());
delete setting;
QMessageBox::information(this,"",QString::fromLocal8Bit("文件保存成功!"));
}
/*设置密匙*/
void MainWindow::configKeySlot()
{
configKey.show();
}
/*选择编码*/
void MainWindow::chooseCodeSlot(QString codec)
{
//设置编码
if(ui->comboBoxCode->currentText()=="LOCAL")
textcodec=QTextCodec::codecForLocale();
else
textcodec=QTextCodec::codecForName(ui->comboBoxCode->currentText().toStdString().c_str());
QString path = ui->lineEditPath->text();
if(path.isEmpty()) return;
QFile file(path);
if(!file.open(QIODevice::ReadOnly))
{
QMessageBox::information(this,"",QString::fromLocal8Bit("文件读取失败!"));
return;
}
QTextStream in(&file);
in.setCodec(textcodec);
//QString content=textcodec->toUnicode(file.readAll().data());
QString content=in.readAll();
file.close();
ui->textEditEncrypt->setText(content);
}