source: comparacioncriptosistemas/interfaz/criptosistemas.cpp @ bd66191

interfaz
Last change on this file since bd66191 was bd66191, checked in by lhernandez <lhernandez@…>, 8 years ago

modificacion en la interfaz, preparada para las validaciones en el tamaño del archivo y mensajes

  • Property mode set to 100644
File size: 10.0 KB
Line 
1#include "criptosistemas.h"
2#include "ui_criptosistemas.h"
3#include <QMessageBox>
4#include<QProgressDialog>
5
6#include <QTime>
7#include <QHash>
8#include <QCryptographicHash>
9#include <QFile>
10#include <QFileDialog>
11#include <QTextStream>
12#include <QDateTime>
13#include <QDebug>
14#include <iostream>
15#include <ctime>
16#include "polynomial.h"
17#include "executionresult.h"
18#include <crypto++/rsa.h>
19#include <crypto++/osrng.h>
20#include <crypto++/base64.h>
21#include <crypto++/files.h>
22#include <crypto++/salsa.h>
23
24const int iterations = 20;
25
26using namespace std;
27using namespace pol;
28using namespace CryptoPP;
29QString dir;
30
31CriptoSistemas::CriptoSistemas(QWidget *parent) :
32    QMainWindow(parent),
33    ui(new Ui::CriptoSistemas)
34{
35    ui->setupUi(this);
36    QFile ruta_priv;
37    QFile ruta_publ;
38    if ( ruta_priv.exists("keys/privkey.txt") && ruta_publ.exists("keys/pubkey.txt"))
39    {
40        ui->generarLlaves->setEnabled(false);
41        ui->cifrar->setEnabled(true);
42        ui->decifrar->setEnabled(true);
43        connect(ui->cifrar,SIGNAL(clicked()),this,SLOT(CifrarArchivo()));
44        connect(ui->decifrar, SIGNAL(clicked()), this, SLOT(DescifrarArchivo()));
45        ui->progressBar->setVisible(false);
46    }
47    else{
48        connect(ui->generarLlaves,SIGNAL(clicked()),this,SLOT(OpcionLlaves()));
49        connect(ui->cifrar,SIGNAL(clicked()),this,SLOT(CifrarArchivo()));
50        ui->progressBar->setVisible(false);
51    }
52}
53
54
55CriptoSistemas::~CriptoSistemas()
56{
57    delete ui;
58}
59
60
61void CriptoSistemas::OpcionLlaves()
62{
63    QPushButton *pushSi = new QPushButton("&Si", this);
64    QPushButton *pushNo = new QPushButton("&No", this);
65
66    QString generar_llaves = "<html><head/><body><p ><img src=':/static/cenditel.png' width='110' height='80' style='float: left;'/></p><p align='center'><span style= 'font-size:16pt; font-weight:600; font-style:italic; color:#ff0000;'>Generar Llaves</span></p></body></html>";
67    ui->titulo->setText(generar_llaves);
68    QString pregunta = "<html><head/><body><p align='center'><span style= 'font-size:16pt; color:#2589eb;'>¿Deseas Generar las llave privada y publica?</span></p><p align='center'><img src=':/static/llaves.png'/></p></body></html>";
69    ui->imgCentral->setText(pregunta);
70    pushSi->setGeometry(QRect(233, 394, 80, 31));
71    pushNo->setGeometry(QRect(518, 394, 80, 31));
72    ui->centralPage->addWidget(ui->imgCentral, 0,2);
73    ui->centralPage->addWidget(pushSi, 1,1);
74    ui->centralPage->addWidget(pushNo, 1,3);
75    connect(pushSi,SIGNAL(clicked()),this,SLOT(GenerarLlaves()));
76    connect(pushNo,SIGNAL(clicked()),this,SLOT(Inicio()));
77    pushSi->setObjectName("si");
78    pushNo->setObjectName("no");
79}
80
81
82void CriptoSistemas::Inicio()
83{
84
85}
86
87void CriptoSistemas::GenerarLlaves()
88{
89    QFile ruta_priv;
90    QFile ruta_publ;
91    QPushButton *pushSi = findChild<QPushButton*>("si");
92    pushSi->setVisible(false);
93    QPushButton *pushNo = findChild<QPushButton*>("no");
94    pushNo->setVisible(false);
95    QPushButton *pushCifrar = new QPushButton("&Cifrar", this);
96    QPushButton *pushDescifrar = new QPushButton("&Descifrar", this);
97    pushCifrar->setObjectName("cifra");
98    pushDescifrar->setObjectName("descifrar");
99    QString exito = "<html><head/><body><p align='center'><span style= 'font-size:16pt; color:#2589eb;'>Éxito al generar las claves, ahora puedes cifrar o descifrar un archivo</span></p><p align='center'><img src=':/static/llaves.png'/></p></body></html>";
100    if ( ruta_priv.exists("keys/privkey.txt") && ruta_publ.exists("keys/pubkey.txt"))
101    {
102
103        QMessageBox::information(this,"Informacion","Las llaves existen, las puedes usar para cifrar o descifrar un archivo!!!");
104        ui->generarLlaves->setEnabled(false);
105        ui->cifrar->setEnabled(true);
106        ui->decifrar->setEnabled(true);
107        ui->imgCentral->setText(exito);
108        ui->centralPage->addWidget(ui->imgCentral, 0,2);
109        ui->centralPage->addWidget(pushCifrar, 1,1);
110        ui->centralPage->addWidget(pushDescifrar, 1,3);
111    }
112    else
113    {
114        QMessageBox::information(this,"Alerta","Generando la clave......!!!");
115        pol_t kx = get_rand_pol(KEY_DEG, false);
116        pol_t ky = get_rand_pol(KEY_DEG, false);
117        pol3v_t D = get_open_key(kx, ky);
118        AutoSeededRandomPool rng;
119        InvertibleRSAFunction privkey;
120        privkey.Initialize(rng, 1024);
121        Base64Encoder privkeysink(new FileSink("keys/privkey.txt"));
122        privkey.DEREncode(privkeysink);
123        privkeysink.MessageEnd();
124        RSAFunction pubkey(privkey);
125
126        Base64Encoder pubkeysink(new FileSink("keys/pubkey.txt"));
127        pubkey.DEREncode(pubkeysink);
128        pubkeysink.MessageEnd();
129        ui->generarLlaves->setEnabled(false);
130        ui->cifrar->setEnabled(true);
131        ui->decifrar->setEnabled(true);
132        QMessageBox::information(this,"Exito","Las llaves se crearon, las puedes usar para cifrar o descifrar un archivo!!!");
133        ui->imgCentral->setText(exito);
134        ui->centralPage->addWidget(ui->imgCentral, 0,2);
135        ui->centralPage->addWidget(pushCifrar, 1,1);
136        ui->centralPage->addWidget(pushDescifrar, 1,3);
137    }
138    connect(pushCifrar,SIGNAL(clicked()),this,SLOT(CifrarArchivo()));
139    connect(pushDescifrar,SIGNAL(clicked()),this,SLOT(DescifrarArchivo()));
140}
141
142
143void CriptoSistemas::CifrarArchivo()
144{
145    QPushButton *pushSeleccionar = new QPushButton("&Seleccionar Archivo ...", this);
146    QPushButton *pushDescargar = new QPushButton("&Descargar en ...", this);
147    QString cifrando = "<html><head/><body><p ><img src=':/static/cenditel.png' width='110' height='80' style='float: left;'/></p><p align='center'><span style= 'font-size:16pt; font-weight:600; font-style:italic; color:#ff0000;'>Cifrar Archivo</span></p></body></html>";
148    ui->titulo->setText(cifrando);
149    QString img = "<html><head/><body><p align='center'><p align='center'><img src=':/static/cifrar.png'/></p></body></html>";
150    ui->imgCentral->setText(img);
151    QPushButton *pushcifrar = findChild<QPushButton*>("cifra");
152    QPushButton *pushDescifrar = findChild<QPushButton*>("descifrar");
153    if(pushcifrar && pushDescifrar){
154        pushcifrar->setVisible(false);
155        pushDescifrar->setVisible(false);
156    }
157    ui->centralPage->addWidget(ui->imgCentral, 0,2);
158    ui->centralPage->addWidget(pushSeleccionar, 0,1);
159    ui->centralPage->addWidget(pushDescargar, 2,2);
160    pushDescargar->setObjectName("pushDescargar");
161
162    connect(pushSeleccionar, &QPushButton::clicked,[=] {
163        emit OpenFolderForCrifrar();
164    });
165    if(dir != "")
166    {
167        connect(pushDescargar, SIGNAL(clicked()), this, SLOT(SaveFile()));
168    }
169    else
170    {
171
172    }
173
174}
175
176void CriptoSistemas::OpenFolderForCrifrar()
177{
178    dir = QFileDialog::getOpenFileName(this,tr("Select file"),"/home",tr("Files (*.txt);;All files (*.*)"));
179    QPushButton *pushDescargar = findChild<QPushButton*>("pushDescargar");
180    connect(pushDescargar, SIGNAL(clicked()), this, SLOT(SaveFile()));
181
182}
183
184void CriptoSistemas::SaveFile()
185{
186    QString dir_save = QFileDialog::getSaveFileName(0,"Save file",QDir::currentPath(),
187            "Text files (*.txt)",
188                new QString("Text files (*.txt)"));
189
190    qDebug()<<dir;
191    // Cifrado
192    string plain;
193    string ruta = dir.toStdString();
194    string save = dir_save.toStdString();
195    FileSource texto_plano(ruta.c_str(), true, new StringSink(plain));
196    FileSource file("keys/pubkey.txt", true, new Base64Decoder);
197    RSAES_OAEP_SHA_Encryptor pubkey(file);
198    AutoSeededRandomPool rng;
199    StringSource ss1( plain, true,
200        new PK_EncryptorFilter( rng, pubkey,
201            new FileSink( save.c_str() )
202        ) // PK_EncryptorFilter
203     ); // StringSource
204    dir = "";
205}
206
207void CriptoSistemas::DescifrarArchivo()
208{
209    QPushButton *pushSeleccionar = new QPushButton("&Seleccionar Archivo ...", this);
210    QPushButton *pushDescargar = new QPushButton("&Descifrar en ...", this);
211    QString cifrando = "<html><head/><body><p><img src=':/static/cenditel.png' width='110' height='80' style='float: left;'/></p><p align='center'><span style= 'font-size:16pt; font-weight:600; font-style:italic; color:#ff0000;'>Decifrar Archivo</span></p></body></html>";
212    ui->titulo->setText(cifrando);
213    QString img = "<html><head/><body><p align='center'><p align='center'><img src=':/static/descifrar.png'/></p></body></html>";
214    ui->imgCentral->setText(img);
215    QPushButton *pushcifrar = findChild<QPushButton*>("cifra");
216    QPushButton *pushDescifrar = findChild<QPushButton*>("descifrar");
217    if(pushcifrar && pushDescifrar){
218        pushcifrar->setVisible(false);
219        pushDescifrar->setVisible(false);
220    }
221    ui->centralPage->addWidget(ui->imgCentral, 0,2);
222    ui->centralPage->addWidget(pushSeleccionar, 0,1);
223    ui->centralPage->addWidget(pushDescargar, 2,2);
224    pushDescargar->setObjectName("pushDescargarEn");
225    connect(pushSeleccionar, SIGNAL(clicked()), this, SLOT(OpenFolderForDescifrar()));
226}
227
228
229void CriptoSistemas::Ayuda()
230{
231
232}
233
234
235void CriptoSistemas::OpenFolderForDescifrar()
236{
237    dir = QFileDialog::getOpenFileName(this,tr("Select file"),"/home",tr("Files (*.txt);;All files (*.*)"));
238    QPushButton *pushDescargar = findChild<QPushButton*>("pushDescargarEn");
239    QPushButton *pushDescarga = findChild<QPushButton*>("pushDescargar");
240    if (pushDescarga)
241    {
242        pushDescarga->setVisible(false);
243    }
244    connect(pushDescargar, SIGNAL(clicked()), this, SLOT(SaveFileForDescifrado()));
245}
246
247
248void CriptoSistemas::SaveFileForDescifrado()
249{
250    QString dir_save = QFileDialog::getSaveFileName(0,"Save file",QDir::currentPath(),
251            "Text files (*.txt)",
252                new QString("Text files (*.txt)"));
253    qDebug()<<dir;
254    // Descifrado
255    AutoSeededRandomPool rng;
256    string str;
257    string ruta = dir.toStdString();
258    string save = dir_save.toStdString();
259    FileSource file("keys/privkey.txt", true, new Base64Decoder);
260    FileSource cifrado(ruta.c_str(), true, new StringSink(str));
261    RSAES_OAEP_SHA_Decryptor d(file);
262
263    StringSource ss2(str, true,
264        new PK_DecryptorFilter(rng, d,
265            new FileSink( save.c_str() )
266       ) // PK_DecryptorFilter
267    ); // StringSource
268    qDebug()<<"DesCifrando";
269    dir = "";
270}
Note: See TracBrowser for help on using the repository browser.