Soluciones de Seguridad de Datos en C++ y Python
Enmascarado
Oculta parte de los datos sensibles para mostrar solo la información necesaria.
Clase Enmascarado
#ifndef ENMASCARADO_H
#define ENMASCARADO_H
#include <string>
using namespace std;
class Enmascarado {
public:
string enmascararTarjeta(string dato, char mascara);
string enmascararNombre(string dato, char mascara);
string enmascararCorreo(string dato, char mascara);
void enmascararArchivo(const string& inputFileName, const string& outputFileName, char mascara);
};
#endif
Ejemplos de Uso
Enmascarar Tarjeta
string Enmascarado::enmascararTarjeta(string dato, char mascara) {
string enmascarado = "";
for (int i = 0; i < dato.length(); i++) { // Recorre el string
if (i < 12) { // Si son los primeros 12 carácteres de la tarjeta
enmascarado += mascara; // Agrega la mascara
} else { // De lo contrario, no agrega la mascara
enmascarado += dato[i];
}
}
return enmascarado;
}
Resultado
La tarjeta "1234567890123456" enmascarada con el carácter '*' se convierte en "************3456".
Enmascarar Nombre
string Enmascarado::enmascararNombre(string dato, char mascara) {
string enmascarado = "";
for (int i = 0; i < dato.length(); i++) { // Recorre el string
if (i == 0 || dato[i] == ' ' || dato[i - 1] == ' ') {
// Si es el primer carácter o es un espacio
enmascarado += dato[i]; // Agrega el carácter
} else {
// De lo contrario, agrega la mascara
enmascarado += mascara;
}
}
return enmascarado;
}
Resultado
El nombre "Juan Perez" enmascarado con el carácter '*' se convierte en "Juan P****".
Enmascarar Correo
string Enmascarado::enmascararCorreo(string dato, char mascara) {
string enmascarado = "";
for (int i = 0; i < dato.length(); i++) { // Recorrer el string
if (i == 0) {
enmascarado += dato[i]; // Si es el primer carácter, agrégalo
} else if (dato[i] == '@') {
// Si es @, agrega todos los caracteres restantes
while (i < dato.length()) {
enmascarado += dato[i];
i++;
}
break;
} else {
enmascarado += mascara; // De lo contrario, agrega la máscara
}
}
return enmascarado;
}
Resultado
El correo "juanperez@gmail.com" enmascarado con el carácter '*' se convierte en "j********@gmail.com".
Enmascarar Archivo
void Enmascarado::enmascararArchivo(const string &inputFileName, const string &outputFileName, char mascara) {
ifstream inputFile(inputFileName);
ofstream outputFile(outputFileName);
if (!inputFile.is_open()) {
cerr << "Error abriendo el archivo de entrada: " << inputFileName << endl;
return;
}
if (!outputFile.is_open()) {
cerr << "Error abriendo el archivo de salida: " << outputFileName << endl;
return;
}
string linea;
Utils util;
while (getline(inputFile, linea)) {
// Determinar el tipo de dato y enmascarar
string enmascarado;
if (util.esNumeroTarjeta(linea)) {
enmascarado = enmascararTarjeta(linea, mascara);
} else if (util.esCorreo(linea)) {
enmascarado = enmascararCorreo(linea, mascara);
} else if (util.esNombre(linea)) {
enmascarado = enmascararNombre(linea, mascara);
} else {
enmascarado = linea; // Si no se reconoce, dejar la línea tal cual
}
outputFile << enmascarado << endl; // Escribir la línea enmascarada en el archivo de salida
}
inputFile.close();
outputFile.close();
cout << "El contenido enmascarado se ha guardado en " << outputFileName << endl;
}
Resultado
archivo.txt: Datos de persona Juan Perez juanperez@gmaillcom 1234567890123456 Transferencia
archivo_enmascarado.txt: D**** d* p****** J*** P**** j********@gmail.com ************3456 T************