Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- ///Estructura del usario:
- typedef struct {
- int idUsuario;
- char nombreUsuario[30];
- char pass[2][5];
- int anioNacimiento;
- char genero; // ‘m’ o ‘f’
- char pais[20];
- int peliculasVistas[30]; //Guarda los id de las películas.
- int cantVistas; // Es el válidos de películas vistas.
- int eliminado; // indica 1 o 0 si el cliente fue eliminado
- } stUsuario;
- int main()
- {
- char archivo[]={"archi.dat"};
- char pass[10];
- int matrizParaEncriptar[2][2]={2,3,-1,1};
- int passNumerica[2][5];
- int passEncriptada[2][5];
- altaUsuario(archivo, matrizParaEncriptar, passNumerica, passEncriptada);
- //mostrarUsuarios(archivo, passNumerica);
- return 0;
- }
- ///Función alta usuario:
- void altaUsuario(char nombreArchivo[], char pass[], int matrizParaEncriptar[][5], int passNumerica[][5], int passEncriptada[][5])
- {
- FILE *archi;
- stUsuario a;
- int iD=0, testigo=0, f, c, i=0;
- archi=fopen(nombreArchivo, "r+b");
- if(archi==NULL)
- {
- archi=fopen(nombreArchivo, "w+b");
- }
- if(archi!=NULL)
- {
- printf("Bienvenido a UTN-etflix:\n");
- /**------------------------------------------------------NOMBRE DE USUARIO----------------------------------------------------------*/
- printf("\n\nNombre de Usuario (maximo 30 caracteres): ");
- fflush(stdin);
- gets(a.nombreUsuario);
- ///En el caso de que el usuario ingrese un nombre con mas de los caracteres disponibles.
- if(strlen(a.nombreUsuario)>30)
- {
- printf("\nLo sentimos, su nombre de usuario tiene mas de 30 caracteres.\nPor favor vuelva a ingresarlo: ");
- fflush(stdin);
- gets(a.nombreUsuario);
- }
- ///En el caso de que el nombre de usuario ingresado ya exista.
- while(testigo=buscarNombreUsuario(nombreArchivo, a.nombreUsuario)==1)
- {
- printf("\nLo sentimos, su nombre de usuario ya existe.\nPor favor ingrese otro (maximo 30 caracteres): ");
- fflush(stdin);
- gets(a.nombreUsuario);
- }
- /**------------------------------------------------------CONTRASEÑA-----------------------------------------------------------------*/
- printf("\nIngrese una contrasenia de 10 caracteres: ");
- for(f=0; f<1; f++)
- {
- gets(a.pass[f]);
- }
- ///En el caso de que el usuario ingrese una contraseña con menos de los caracteres solicitados.
- while(strlen(a.pass)<10)
- {
- printf("\nLo sentimos, su contrasenia tiene menos de 10 caracteres.\nPor favor ingrese una contrasenia de 10 caracteres: ");
- for(f=0; f<1; f++)
- {
- gets(a.pass[f]);
- }
- }
- ///En el caso de que el usuario ingrese una contraseña con más de los caracteres solicitados.
- while(strlen(a.pass)>10)
- {
- printf("\nLo sentimos, su contrasenia tiene mas de 10 caracteres.\nPor favor ingrese una contrasenia de 10 caracteres: ");
- for(f=0; f<1; f++)
- {
- gets(a.pass[f]);
- }
- }
- ///Transformamos la contraseña de caracteres en una numerica, segun el orden de cada letra en el abecedario:
- strcpy(pass, a.pass); //Trabajamos con una copia de la contraseña para no alterar los datos originales.
- int cant=strlen(pass);
- numeroAletras(pass);
- pasarAnumeros(pass, 25, passNumerica, 10);
- //encriptarPass(nombreArchivo, passNumerica, passEncriptada, matrizParaEncriptar);
- /**------------------------------------------------------EL RESTO-------------------------------------------------------------------*/
- printf("\nAnio de nacimiento: ");
- scanf("%d", &a.anioNacimiento);
- printf("\nGenero (m/f): ");
- fflush(stdin);
- scanf("%c", &a.genero);
- printf("\nPais: ");
- fflush(stdin);
- gets(a.pais);
- fseek(archi, 0, SEEK_END);
- iD=ftell(archi)/sizeof(stUsuario);
- a.idUsuario=iD+1;
- fwrite(&a, sizeof(stUsuario), 1, archi);
- if(fclose(archi)==0)
- {
- printf("\nLos datos se guardaron con exito.");
- }
- else
- {
- printf("\nError al guardar los datos.");
- }
- }
- }
- ///Buscar si un nuevo nombre de usuario ya existe en el archivo:
- int buscarNombreUsuario(char nombreArchivo[], char nombre[])
- {
- int testigo=0;
- stUsuario a;
- FILE* archi;
- archi=fopen(nombreArchivo, "rb");
- if(archi!=NULL)
- {
- while(!feof(archi))
- {
- fread(&a, sizeof(stUsuario), 1, archi);
- if(strcmp(nombre, a.nombreUsuario)==0) //Recorremos el archivo y buscamos si ya existe un usuario con ese nombre.
- {
- testigo=1;
- }
- }
- fclose(archi);
- }
- return testigo;
- }
- ///Función para pasar la pass de caracteres a enteros:
- void numeroAletras(char letra[])
- {
- char abc[]= {' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
- int i=0;
- while(i<=26)
- {
- if(letra==abc[i])
- {
- return i;
- }
- i++;
- }
- }
- void pasarAnumeros(char pass[],int cant_letras,int contra[][5], int cantidad) /// Ingresa el numero a la matriz
- {
- int j=0;
- int k=0;
- int i=0;
- for(k=0; k<5; k++)
- {
- for(j=0; j<2; j++)
- {
- if(i<cantidad)
- {
- contra[j][k]=numeroAletras(pass[i]);
- }
- else
- {
- contra[j][k]=0;
- }
- i++;
- }
- j=0;
- }
- }
- ///Función para encriptar la contraseña:
- void encriptarPass(char nombreArchivo[], int passNumerica[][5], int passEncriptada[][5], int matrizParaEncriptar[][2])
- {
- stUsuario a;
- FILE *archi;
- archi=fopen(nombreArchivo, "ab");
- if(archi!=NULL)
- {
- ///------------------------------------------------PRIMERA FILA--------------------------------------------------///
- passEncriptada[0][0]=(matrizParaEncriptar[0][0]*passNumerica[0][0])+(matrizParaEncriptar[0][1]*passNumerica[1][0]);
- passEncriptada[0][1]=(matrizParaEncriptar[0][0]*passNumerica[0][1])+(matrizParaEncriptar[0][1]*passNumerica[1][1]); //Multiplicamos la primer fila de la matriz que utilizamos para encriptar por todas
- passEncriptada[0][2]=(matrizParaEncriptar[0][0]*passNumerica[0][2])+(matrizParaEncriptar[0][1]*passNumerica[1][2]); //las columnas de la matriz que contiene la pass en numeros enteros.
- passEncriptada[0][3]=(matrizParaEncriptar[0][0]*passNumerica[0][3])+(matrizParaEncriptar[0][1]*passNumerica[1][3]);
- passEncriptada[0][4]=(matrizParaEncriptar[0][0]*passNumerica[0][4])+(matrizParaEncriptar[0][1]*passNumerica[1][4]);
- ///------------------------------------------------SEGUNDA FILA--------------------------------------------------///
- passEncriptada[1][0]=(matrizParaEncriptar[1][0]*passNumerica[0][0])+(matrizParaEncriptar[1][1]*passNumerica[1][0]);
- passEncriptada[1][1]=(matrizParaEncriptar[1][0]*passNumerica[0][1])+(matrizParaEncriptar[1][1]*passNumerica[1][1]); //Hacemos lo mismo pero con la segunda fila de la matriz que
- passEncriptada[1][2]=(matrizParaEncriptar[1][0]*passNumerica[0][2])+(matrizParaEncriptar[1][1]*passNumerica[1][2]); //utilizamos para encriptar.
- passEncriptada[1][3]=(matrizParaEncriptar[1][0]*passNumerica[0][3])+(matrizParaEncriptar[1][1]*passNumerica[1][3]);
- passEncriptada[1][4]=(matrizParaEncriptar[1][0]*passNumerica[0][4])+(matrizParaEncriptar[1][1]*passNumerica[1][4]);
- a.pass[2][5]=passEncriptada; //Luego guardamos en la estructura y el archivo la contraseña encriptada.
- fwrite(&a, sizeof(stUsuario), 1, archi);
- fclose(archi);
- }
- }
- ///Función auxiliar para mostrar contenido del archivo:
- void mostrarUsuarios(char nombreArchivo[])
- {
- stUsuario a;
- FILE *archi;
- int f, c;
- archi=fopen(nombreArchivo, "rb");
- if(archi!=NULL)
- {
- while(!feof(archi))
- {
- fread(&a, sizeof(stUsuario), 1, archi);
- if(!feof(archi))
- {
- printf("\n\nContrasenia numerica:\n");
- for(f=0; f<2; f++)
- {
- printf("\n");
- for(c=0; c<5; c++)
- {
- printf("{%d}", passNumerica[f][c]);
- }
- }
- }
- }
- fclose(archi);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement