#include "criptosistemas.h" #include "ui_criptosistemas.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "polynomial.h" #include "executionresult.h" #include #include #include #include #include const int iterations = 20; using namespace std; using namespace pol; using namespace CryptoPP; QString dir; CriptoSistemas::CriptoSistemas(QWidget *parent) : QMainWindow(parent), ui(new Ui::CriptoSistemas) { ui->setupUi(this); QFile ruta_priv; QFile ruta_publ; if ( ruta_priv.exists("keys/privkey.txt") && ruta_publ.exists("keys/pubkey.txt")) { ui->generarLlaves->setEnabled(false); ui->cifrar->setEnabled(true); ui->decifrar->setEnabled(true); connect(ui->cifrar,SIGNAL(clicked()),this,SLOT(CifrarArchivo())); connect(ui->decifrar, SIGNAL(clicked()), this, SLOT(DescifrarArchivo())); ui->progressBar->setVisible(false); } else{ connect(ui->generarLlaves,SIGNAL(clicked()),this,SLOT(OpcionLlaves())); connect(ui->cifrar,SIGNAL(clicked()),this,SLOT(CifrarArchivo())); ui->progressBar->setVisible(false); } } CriptoSistemas::~CriptoSistemas() { delete ui; } void CriptoSistemas::OpcionLlaves() { QPushButton *pushSi = new QPushButton("&Si", this); QPushButton *pushNo = new QPushButton("&No", this); QString generar_llaves = "

Generar Llaves

"; ui->titulo->setText(generar_llaves); QString pregunta = "

¿Deseas Generar las llave privada y publica?

"; ui->imgCentral->setText(pregunta); pushSi->setGeometry(QRect(233, 394, 80, 31)); pushNo->setGeometry(QRect(518, 394, 80, 31)); ui->centralPage->addWidget(ui->imgCentral, 0,2); ui->centralPage->addWidget(pushSi, 1,1); ui->centralPage->addWidget(pushNo, 1,3); connect(pushSi,SIGNAL(clicked()),this,SLOT(GenerarLlaves())); connect(pushNo,SIGNAL(clicked()),this,SLOT(Inicio())); pushSi->setObjectName("si"); pushNo->setObjectName("no"); } void CriptoSistemas::Inicio() { } void CriptoSistemas::GenerarLlaves() { QFile ruta_priv; QFile ruta_publ; QPushButton *pushSi = findChild("si"); pushSi->setVisible(false); QPushButton *pushNo = findChild("no"); pushNo->setVisible(false); QPushButton *pushCifrar = new QPushButton("&Cifrar", this); QPushButton *pushDescifrar = new QPushButton("&Descifrar", this); pushCifrar->setObjectName("cifra"); pushDescifrar->setObjectName("descifrar"); QString exito = "

Éxito al generar las claves, ahora puedes cifrar o descifrar un archivo

"; if ( ruta_priv.exists("keys/privkey.txt") && ruta_publ.exists("keys/pubkey.txt")) { QMessageBox::information(this,"Informacion","Las llaves existen, las puedes usar para cifrar o descifrar un archivo!!!"); ui->generarLlaves->setEnabled(false); ui->cifrar->setEnabled(true); ui->decifrar->setEnabled(true); ui->imgCentral->setText(exito); ui->centralPage->addWidget(ui->imgCentral, 0,2); ui->centralPage->addWidget(pushCifrar, 1,1); ui->centralPage->addWidget(pushDescifrar, 1,3); } else { QMessageBox::information(this,"Alerta","Generando la clave......!!!"); pol_t kx = get_rand_pol(KEY_DEG, false); pol_t ky = get_rand_pol(KEY_DEG, false); pol3v_t D = get_open_key(kx, ky); AutoSeededRandomPool rng; InvertibleRSAFunction privkey; privkey.Initialize(rng, 1024); Base64Encoder privkeysink(new FileSink("keys/privkey.txt")); privkey.DEREncode(privkeysink); privkeysink.MessageEnd(); RSAFunction pubkey(privkey); Base64Encoder pubkeysink(new FileSink("keys/pubkey.txt")); pubkey.DEREncode(pubkeysink); pubkeysink.MessageEnd(); ui->generarLlaves->setEnabled(false); ui->cifrar->setEnabled(true); ui->decifrar->setEnabled(true); QMessageBox::information(this,"Exito","Las llaves se crearon, las puedes usar para cifrar o descifrar un archivo!!!"); ui->imgCentral->setText(exito); ui->centralPage->addWidget(ui->imgCentral, 0,2); ui->centralPage->addWidget(pushCifrar, 1,1); ui->centralPage->addWidget(pushDescifrar, 1,3); } connect(pushCifrar,SIGNAL(clicked()),this,SLOT(CifrarArchivo())); connect(pushDescifrar,SIGNAL(clicked()),this,SLOT(DescifrarArchivo())); } void CriptoSistemas::CifrarArchivo() { QPushButton *pushSeleccionar = new QPushButton("&Seleccionar Archivo ...", this); QPushButton *pushDescargar = new QPushButton("&Descargar en ...", this); QString cifrando = "

Cifrar Archivo

"; ui->titulo->setText(cifrando); QString img = "

"; ui->imgCentral->setText(img); QPushButton *pushcifrar = findChild("cifra"); QPushButton *pushDescifrar = findChild("descifrar"); if(pushcifrar && pushDescifrar){ pushcifrar->setVisible(false); pushDescifrar->setVisible(false); } ui->centralPage->addWidget(ui->imgCentral, 0,2); ui->centralPage->addWidget(pushSeleccionar, 0,1); ui->centralPage->addWidget(pushDescargar, 2,2); pushDescargar->setObjectName("pushDescargar"); connect(pushSeleccionar, &QPushButton::clicked,[=] { emit OpenFolderForCrifrar(); }); if(dir != "") { connect(pushDescargar, SIGNAL(clicked()), this, SLOT(SaveFile())); } else { } } void CriptoSistemas::OpenFolderForCrifrar() { dir = QFileDialog::getOpenFileName(this,tr("Select file"),"/home",tr("Files (*.txt);;All files (*.*)")); QPushButton *pushDescargar = findChild("pushDescargar"); connect(pushDescargar, SIGNAL(clicked()), this, SLOT(SaveFile())); } void CriptoSistemas::SaveFile() { QString dir_save = QFileDialog::getSaveFileName(0,"Save file",QDir::currentPath(), "Text files (*.txt)", new QString("Text files (*.txt)")); qDebug()<titulo->setText(cifrando); QString img = "

"; ui->imgCentral->setText(img); QPushButton *pushcifrar = findChild("cifra"); QPushButton *pushDescifrar = findChild("descifrar"); if(pushcifrar && pushDescifrar){ pushcifrar->setVisible(false); pushDescifrar->setVisible(false); } ui->centralPage->addWidget(ui->imgCentral, 0,2); ui->centralPage->addWidget(pushSeleccionar, 0,1); ui->centralPage->addWidget(pushDescargar, 2,2); pushDescargar->setObjectName("pushDescargarEn"); connect(pushSeleccionar, SIGNAL(clicked()), this, SLOT(OpenFolderForDescifrar())); } void CriptoSistemas::Ayuda() { } void CriptoSistemas::OpenFolderForDescifrar() { dir = QFileDialog::getOpenFileName(this,tr("Select file"),"/home",tr("Files (*.txt);;All files (*.*)")); QPushButton *pushDescargar = findChild("pushDescargarEn"); QPushButton *pushDescarga = findChild("pushDescargar"); if (pushDescarga) { pushDescarga->setVisible(false); } connect(pushDescargar, SIGNAL(clicked()), this, SLOT(SaveFileForDescifrado())); } void CriptoSistemas::SaveFileForDescifrado() { QString dir_save = QFileDialog::getSaveFileName(0,"Save file",QDir::currentPath(), "Text files (*.txt)", new QString("Text files (*.txt)")); qDebug()<