void sudoku::guardarOriginal(){ QFile file ("guardarO.txt"); file.open(QIODevice::WriteOnly); for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ QTextStream out(&file); if((i==8)&&(j==8)){ out <<encriptar(matrizSudoku[i][j]);} else out <<encriptar(matrizSudoku[i][j]).append(","); } QTextStream out(&file); out << "\n"; } file.close(); }
void sudoku:: guardarPartida(){ int matriz[9][9]; llenarCeros(matriz); obtenerMatriz(matriz); QFile file ("guardar.txt"); file.open(QIODevice::WriteOnly); for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ QTextStream out(&file); if((i==8)&&(j==8)){ out <<encriptar(matriz[i][j]);} else out <<encriptar(matriz[i][j]).append(","); } QTextStream out(&file); out << "\n"; } file.close(); }
int sockets() { char Usuario [30]; printf("Digite el usuario \n"); // Se le solicita al usuario el username del contacto con el que desea cominicarse scanf("%s",Usuario); lee(Usuario); // Se llama a la función leer para validar que el usuario existe y a su vez nos devuelva la ip // y el puerto asociado int socket1, nuevoSocket, numPuerto, mensaje,pid; // Se declaran las variables necesarias para el socket socklen_t clilen; char buffer[1024]; // Tamaño del mensaje numPuerto = atoi(puerto); // Se convierte el numero de puerto a entero pid = fork(); // Se guarda el id de proceso if (pid < 0){ // Error si el fork devuelve un -1 error("El fork no se realizo de forma correcta\n"); } //Si el id es igual a 0 se cierra el socket y se abre una nueva comunicacion if (pid == 0) // La parte del sockect que envía { struct sockaddr_in dir_servidor; // Se declaran las estructuras donde se struct hostent *servidor; // guarda la ip del servidor while (1){ // Se crea un while infinito sleep (1); //Se crea el socket socket1 = socket(AF_INET, SOCK_STREAM, 0); //Muestra error en caso de no poder crear el socket if (socket1 < 0) error("El socket no se ha podido crear\n"); //Obtiene la direccion ip del servidor if (existe == 1) { // Si el usuario se encontraba en el archivo se llama a copiar para que elimine el \0 copiar (ip, IP); servidor = gethostbyname(IP); } else servidor = gethostbyname(ip); //Si el servidor es nulo ,muestra el error if (servidor == NULL) { fprintf(stderr,"Error, no se encuentra con quien conectar \n"); exit(0); } //Rellena con 0 bzero((char *) &dir_servidor, sizeof(dir_servidor)); dir_servidor.sin_family = AF_INET; //Protocolo TCP //Copia la direccion bcopy((char *)servidor->h_addr,(char*)&dir_servidor.sin_addr.s_addr,servidor->h_length); dir_servidor.sin_port = htons(numPuerto); //Representa el numero de puerto //Verifica que pueda establecer la conexion if (connect(socket1,(struct sockaddr *)&dir_servidor,sizeof(dir_servidor)) < 0) error("Error, en crear la conexión"); printf("\033[34m \n Yo: "); // Es el printf que va indicar que le corresponde escribir //Relleno con ceros bzero(buffer,1024); //Lee el mensaje desde la entrada estandar fgets(buffer,1023,stdin); //Solicita escribir un mensaje mensaje = write(socket1,buffer,strlen(buffer)); //Si se produce un error al escribir el msj, se muestra el error if (mensaje < 0) error("Error, no se pudo escribir el mensaje"); if (strcmp(buffer,"salir\n")==0){ // Si el usuario digita "salir" la conversación se da por finalizada printf ("\033[31m Conversacion finalizada\n"); sleep(2); system("clear"); // Limpia la pantalla break; } //Relleno con ceros bzero(buffer,1024); //Lee el mensaje encriptar(buffer,1); mensaje = read(socket1,buffer,1023); //Si se produce un error al leer el msj, se muestra el error if (mensaje < 0) error("Error, no se puede leer el mensaje"); //printf("%s", buffer); close(socket1); } return 0; } else { //Servidor //printf("Entre al servidor"); struct sockaddr_in dir_servidor, dir_cliente; socket1 = socket(AF_INET, SOCK_STREAM, 0); //validacion en caso de no se pueda establecer el socket if (socket1 < 0) error("Error, no se puede crear el socket"); //Establece los valores del bufer a 0 bzero((char *) &dir_servidor, sizeof(dir_servidor)); //numPuerto obtine el numero de puerto ingresado por el usuario dir_servidor.sin_family = AF_INET; //Protocolo TCP dir_servidor.sin_addr.s_addr = INADDR_ANY; //Representa la direccion ip dir_servidor.sin_port = htons(numPuerto); //Representa el puerto //Verifica la conexion if (bind(socket1, (struct sockaddr *) &dir_servidor,sizeof(dir_servidor)) < 0) error("Error, no se puede crear la conexión"); while(1){ listen(socket1,5); //Tamaño de bytes que ocupa la direccion cliente clilen = sizeof(dir_cliente); //Se cra una nueva comunicación nuevoSocket = accept(socket1,(struct sockaddr *) &dir_cliente, &clilen); if (nuevoSocket < 0) error("Error, no se puede aceptar la conexión"); bzero(buffer,256); sleep (2); //Lee el mensaje desencriptar(buffer,1); mensaje = read(nuevoSocket,buffer,255); //Muestra el error en caso de que se produzca if (mensaje < 0) error("Error, al leer el mensaje enviado"); if (strcmp(buffer,"salir\n")==0){ printf ("\033[33m Conversacion finalizada\n"); sleep(2); Menu(); sleep(2); } else{ //Muestra el mensaje recibido //desencriptar(buffer,1); printf("\033[32m \n %s: %s\n",Usuario, buffer); //Muestra el mensaje enviado } close(nuevoSocket); } } return 0; }
int main() { srand(time(NULL)); int eleccion_menu; printf("Ingresa el numero correspondiente a la funcion que quieras usar\n"); printf("1. Generar claves publica y privada\n"); printf("2. Encriptar desde archivo\n"); printf("3. Desencriptar desde archivo\n"); printf("4. Manual\n"); scanf("%d", &eleccion_menu); if (eleccion_menu == 1) { // GENERAR CLAVES PUBLICA Y PRIVADA int primos[10] = {17, 19, 23, 29, 31, 37, 41, 43, 47, 53}; // p y q dos numeros primos... int p = primos[rand()%10]; int q = primos[rand()%10]; // n y euler(n)... long int n = p*q; long int phi_n = (p-1)*(q-1); // e tal que 1 < e < euler(n) y e coprimo con n y euler(n) long int e = rand()%phi_n; while(maximo_comun_divisor(e, n) != 1 || maximo_comun_divisor(e, phi_n) != 1) { e = rand()%phi_n; } // d tal que (d*e)%phi_n = 1 // Usamos la funcion modIverse para generar la d... long int d = modInverso(e, phi_n) + phi_n * (rand()%5 + 1); printf("--- Las claves son ---\n"); printf("--- publica (%li,%li) ---\n", e, n); printf("--- privada (%li,%li) ---\n", d, n); } else if (eleccion_menu == 2) { // ENCRIPTAR DESDE ARCHIVO long int e, n; FILE * archivo_de_texto; archivo_de_texto = fopen("mensaje_entrada.txt", "r"); char mensaje_entrada[1000]; // Contiene el mensaje del archivo long int mensajeEncriptado[1000]; // Contiene el mensaje encriptado //Limpiamos los 1000 elementos que tiene el mensaje //antes de llenarlo con los caracteres for (int i = 0; i < 1000; ++i) { mensaje_entrada[i] = 0; mensajeEncriptado[i] = 0; } for (int i = 0; i < 1000; ++i) { fscanf(archivo_de_texto, "%c", &mensaje_entrada[i]); if (mensaje_entrada[i] == 0) { break; } } fclose(archivo_de_texto); printf("Ingrese la clave bajo la cual queres encriptar el mensaje\n"); printf("Clave e (publica): "); scanf("%li", &e); printf("Clave n: "); scanf("%li", &n); encriptar(mensaje_entrada, mensajeEncriptado, e, n); // Salida en hex a cryptofile.txt printf("El mensaje encriptado a quedado en el archivo \"cryptofile.txt\" \n"); } else if(eleccion_menu == 3) { long int d, n; FILE * archivo_de_encriptado; archivo_de_encriptado = fopen ("cryptofile.txt","r"); long int crypto_hex[1000]; // Contiene los valores recibidos del archivo cryptofile.txt char mensaje_salida[1000]; // Contiene el mensaje que saldra for (int i = 0; i < 1000; ++i) { crypto_hex[i] = 0; mensaje_salida[i] = 0; } for (int i = 0; i < 1000; ++i) { fscanf (archivo_de_encriptado, "%05X ", &crypto_hex[i]); if (crypto_hex[i] == 0) { break; } printf ("I have read: %li \n",crypto_hex[i]); // SACAR } fclose(archivo_de_encriptado); printf("Ingrese su clave privada para desencriptar el mensaje\n"); printf("Clave d (privada): "); scanf("%li", &d); printf("Clave n: "); scanf("%li", &n); desencriptar(crypto_hex, mensaje_salida, d, n); for (int i = 0; i < strlen(mensaje_salida); ++i) { printf("%c", mensaje_salida[i]); } FILE * salidarchivo; salidarchivo = fopen("mensaje_salida.txt", "w"); for (int i = 0; i < strlen(mensaje_salida); ++i) { fprintf(salidarchivo, "%c", mensaje_salida[i]); } fclose(salidarchivo); } return 0; }