Código
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include <math.h> // constantes #define numero_de_letras 27 // variables globales double claves[numero_de_letras][1000]; int clave[numero_de_letras]; // arrays globales char letras[]="abcdefghijklmnopqrstuvwxyz "; char cifrado[999999999]; char descifrado[999999999]; // prototipos de funciones void generar_clave(int); void ingresar_clave(int []); int comprobar_repetir_vector(int, int []); int comprobar_repetir_matriz(double, double [][1000]); void arrancar_motor(int, int); int suma(double); double aleatorio(int, int); double aleatorio_cifras(int); void cifrar(int, int, char []); void descifrar(int, char []); int main() { generar_clave(8); arrancar_motor(8, 20); cifrar(8, 20, "hola esto es una prueba de un texto cifrado"); descifrar(8, cifrado); } // comprueba si un numero esta repetido en una matriz, si esta repetido devuelve 1, en caso contrario 0. int comprobar_repetir_matriz(double numero, double matriz[][1000]) { int x; int y; for(x=0; x<numero_de_letras; x++) { for(y=0;y<1000;y++) { if (numero==matriz[x][y]) { return 1; } } } return 0; } // comprueba si un numero esta repetido en un vector, si esta repetido devuelve 1, en caso contrario 0. int comprobar_repetir_vector(int numero, int vector[]){ int x; for(x=0; x<numero_de_letras;x++) { if(numero==vector[x]) { return 1; } } return 0; } // Devuelve la suma de las cifras de un numero int suma(double numero) { int resultado=0; while (numero>0) { resultado+=fmod(numero, 10); numero/=10; } return resultado; } //Genera un numero aleatorio sin decimales dentro de un rango entre max y min. double aleatorio(int max, int min) { } //Genera un numero aleatorio de x cifras double aleatorio_cifras(int cifras) { int x; int random; char aux[2]; char num[cifras]; num[0]=0; for(x=0; x<cifras; x++){ if((random==0) && (x==0)) { x--; continue; } } } //Genera una clave optimidada y la guarda en la variable global clave. void generar_clave(int numero_suma) { int maximo, minimo, x, y, num_random; int max=120; int min=60; maximo=numero_suma*max/20; minimo=numero_suma*min/20; for(x=0;x<numero_de_letras;) { num_random=aleatorio(maximo, minimo); if (comprobar_repetir_vector(num_random, &clave[0])==1) { continue; } clave[x]=num_random; x++; } for(y=0;y<numero_de_letras;y++) { } } // Permite ingresar el valor de cualquier array en la variable global clave. void ingresar_clave(int array[]) { int x; for(x=0;x<numero_de_letras;x++) { clave[x]=array[x]; } } // Genera los numeros aleatorios correspondientes a cada letra y los guarda según corresponda en la matriz claves. void arrancar_motor(int numero_cifras, int cantidad_numeros){ int y, z, h; double num_random; for(z=0; z<numero_de_letras; z++) { for(h=0; h<cantidad_numeros;) { num_random=aleatorio_cifras(numero_cifras); if (((fabs(suma(num_random)-clave[z])) < 0.00001) && (comprobar_repetir_matriz(num_random, claves))==0) { claves[z][h]=num_random; h++; } else { continue; } } } for(y=0;y<numero_de_letras;y++) { } } // Cifra un texto usando la clave almancenada en la variable global clave, el resultado lo guarda en la variable global cifrado. void cifrar(int numero_cifras, int cantidad_numeros, char texto[]) { int letra, letrass, x; cifrado_inside[0] = 0; char string_auxiliar[numero_cifras+1]; for(letrass=0; letrass<numero_de_letras; letrass++) { if (texto[letra]==letras[letrass]) { break; } } } } // Descifra un texto cifrado anteriormente usando la clave almancenada en la variable global clave, el resultado lo guarda en la variable global descifrado. void descifrar(int numero_cifras, char cifrado[]) { char auxiliar[numero_cifras]; int x, y=0, z; for(x=0; x<strlen(cifrado); x++) { auxiliar[y]=cifrado[x]; y++; if(y==numero_cifras) { for(z=0; z<numero_de_letras; z++) { // printf("\n%d\n", suma(atof(auxiliar))); y=0; break; } } } } }
Gracias de antemano.
Saludos.