Soluciones de Seguridad de Datos en C++ y Python
Cifrado
Proceso de codificación de datos para proteger la información sensible de accesos no autorizados.
Cifrado con algoritmo César en C++
El algoritmo de cifrado utilizado en C++ es el cifrado César, que desplaza cada carácter del texto original un número fijo de posiciones en el alfabeto. El número de desplazamientos está dado por una llave.
Clase Cifrado
#ifndef CIFRADO_H
#define CIFRADO_H
#include <string>
using namespace std;
class Cifrado { // Clase para cifrar y descifrar
public:
string cifrarMensaje(string dato, int llave); // Cifra un mensaje con método Cesar
string descifrarMensaje(string dato, int llave); // Descifra un mensaje con método Cesar
void cifrarArchivo(const string &inputFile, const string &outputFile, int llave); // Cifra el contenido de un archivo con el método Cesar
void descifrarArchivo(const string &inputFile, const string &outputFile, int llave); // Descifra el contenido de un archivo con el método Cesar
};
#endif
Ejemplos de Uso
Cifrar Mensaje
string Cifrado::cifrarMensaje(string dato, int llave) {
string resultado = "";
for (char c : dato) {
if (isalpha(c)) { // Si el carácter es una letra
char base = islower(c) ? 'a' : 'A';
resultado += (c - base + llave) % 26 + base;
} else if (isdigit(c)) { // Si el carácter es un dígito
resultado += (c - '0' + llave) % 10 + '0';
} else { // Si el carácter no es una letra ni un dígito
resultado += c;
}
}
return resultado;
}
Resultado
El texto "Hola Mundo" cifrado con un desplazamiento (llave)de 3 se convierte en "Krod Pxqgr".
Descifrar Mensaje
string Cifrado::descifrarMensaje(string dato, int llave) {
string resultado = "";
for (char c : dato) {
if (isalpha(c)) { // Si el carácter es una letra
char base = islower(c) ? 'a' : 'A';
resultado += (c - base - llave + 26) % 26 + base;
} else if (isdigit(c)) { // Si el carácter es un dígito
resultado += (c - '0' - llave + 10) % 10 + '0';
} else { // Si el carácter no es una letra ni un dígito
resultado += c;
}
}
return resultado;
}
Resultado
El texto "Krod Pxqgr" descifrado con un desplazamiento (llave) de 3 se convierte en "Hola Mundo".
Cifrar Archivo
void Cifrado::cifrarArchivo(const string &inputFile, const string &outputFile, int llave) {
// Abrir archivo de entrada
ifstream entrada(inputFile);
if (!entrada.is_open()) {
cerr << "Error: No se pudo abrir el archivo de entrada: " << inputFile << endl;
return;
}
// Leer archivo de entrada
string linea, contenido;
while (getline(entrada, linea)) {
contenido += linea + "\n";
}
entrada.close();
// Cifrar el contenido leído
string contenidoCifrado = cifrarMensaje(contenido, llave);
// Guardar el archivo cifrado
ofstream salida(outputFile);
if (!salida.is_open()) {
cerr << "Error: No se pudo abrir el archivo de salida: " << outputFile << endl;
return;
}
salida << contenidoCifrado;
salida.close();
cout << "El contenido cifrado se ha guardado en " << outputFile << endl;
}
Resultado
archivo.txt: Datos de persona Juan Perez juanperez@gmaillcom 1234567890123456 Transferencia
archivo_cifrado.txt: Ebupt ef qfstpob Kvbo Qfsfa kvboqfsfa@hnbjm.dpn 2345678901234567 Usbotgfsfodjb
Descifrar Archivo
void Cifrado::descifrarArchivo(const string &inputFile, const string &outputFile, int llave) {
// Abrir archivo de entrada
ifstream entrada(inputFile);
if (!entrada.is_open()) {
cerr << "Error: No se pudo abrir el archivo de entrada: " << inputFile
<< endl;
return;
}
// Leer archivo de entrada
string linea, contenido;
while (getline(entrada, linea)) {
contenido += linea + "\n";
}
entrada.close();
// Descifrar el contenido leído
string contenidoDescifrado = descifrarMensaje(contenido, llave);
// Guardar el archivo descifrado
ofstream salida(outputFile);
if (!salida.is_open()) {
cerr << "Error: No se pudo abrir el archivo de salida: " << outputFile
<< endl;
return;
}
salida << contenidoDescifrado;
salida.close();
cout << "El contenido descifrado se ha guardado en " << outputFile << endl;
}
Resultado
archivo_cifrado.txt:
Ebupt ef qfstpob
Kvbo Qfsfa
kvboqfsfa@hnbjm.dpn
2345678901234567
Usbotgfsfodjb
archivo_descifrado.txt:
Datos de persona
Juan Perez
juanperez@gmaillcom
1234567890123456
Transferencia