Problema con generador de contraseñas en C

Iniciado por Paulo123, 22 Abril 2021, 13:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Paulo123

Buenas.

Me gustaría saber si alguien ayudarme a completar lo que me queda de este programa que lo que va a hacer es mediante consola de comandos (cmd) nombraremos al archivo (en este caso se llama password) y seguido a esto especificaremos en consola lo que queremos que muestre: el número de caracteres que va a tener la contraseña poniendo (-1, -2, -3...) después si queremos que la contraseña sea solamente de letras minúsculas que lo especificaremos con: -n, si son mayúsculas con: -M, si es de números con: -d y luego si queremos utilizar varios de estos al mismo tiempo sería simplemente combinándolos, y si queremos que sea con todos los argumentos con -all. EJEMPLO: Contraseña de 9 caracteres con letras minúsculas y mayúsculas, y además, caracteres especiales: password -9 -Mn -c. Por cierto, al final también me gustaría añadir una función de error, que ya la tengo declarada al principio para que cuando el usuario coloque un parámetro que no existe, que le avise y mediante un printf() le avise de ello, aunque esto es relativamente fácil.

Código que llevo hecho:

password.c

/* Generador de contraseñas por consola -l -Mn -nM -all */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

void numeros(int);
void letras(int);
void mayusculas(int); //Solo mayúsculas
void minusculas(int); //Solo minúsculas
void letrastodo(int); //Mayúsuculas y minúsculas
void especiales(int); //Solo caracteres especiales
void mayusnumeros(int); //Mayúsculas y números al mismo tiempo
void minusnumeros(int); //Minúsculas y números al mismo tiempo
void mayusminusnumeros(int); //Mayúsculas, minúsculas y números al mismo tiempo
void todo(int); //Todo lo del programa (números, letras...)

void error (void); //Si no seleccionas alguno de los parámetros (función error, que hay que hacer al final)

char contrasenia[500]; //Se almacena la contraseña con 500 caracteres
char mayus[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char minus[] = "abcdefghijklmnopqrstuvwxyz";
char nums[] = "0123456789";
char caracteres[] = "!@#$^&*?";

int main(int argc, char* argv[]){
   srand(time(NULL));
   int longitud;
   char opcion[4];
   char item[4];
   sscanf(argv[1], "%c", item);
   
   if (strcmp(item, "H")==0 || strcmp (item, "H")==0) error();
   scanf(argv[2], "%c", opcion);
   
   longitud = atoi(item);
if (longitud==0) printf("La longitud de la clave no puede ser 0.");



if (argc==3){
   
   
   if (longitud < 5 || longitud < 66){
       
           if ((strcmp(opcion, "all"))==0) todo(longitud);
   if ((strcmp(opcion, "M"))==0) mayusculas(longitud);
   if ((strcmp(opcion, "n"))==0) minusculas(longitud);
   if ((strcmp(opcion, "d"))==0) numeros(longitud);
   if ((strcmp(opcion, "c"))==0) especiales(longitud);
   if ((strcmp(opcion, "Mn")==0) || (strcmp(opcion, "nM"))==0) letrastodo(longitud);
   if ((strcmp(opcion, "Md"))==0 || (strcmp(opcion, "dM"))==0) mayusnumeros(longitud);
   if ((strcmp(opcion, "md"))==0 || (strcmp(opcion, "dm"))==0) minusnumeros(longitud);
   if ((strcmp(opcion, "mdM")==0) || (strcmp(opcion, "mMd"))==0 || ((strcmp(opcion, "dmM")==0) || (strcmp(opcion, "Mmd"))==0))mayusminusnumeros(longitud);
   }
   else error();
}
else error();
}



Diría que me queda poco por hacer, ya que tengo lo que son las declaraciones y los ifs correctamente, pero lo que me quedaría sería si no me equivoco hacer las funciones de las propias letras, numeros, caracteres especiales... Para que se genere la propia contraseña, pero no se cómo hacerlo y he visto algún post en este mismo foro y no me termino de aclarar al respecto, aunque probablemente sea utilizando un switch para cada uno de los argumentos, aún así agradecería que completaseis el código y fueseis explicando más o menos los procedimientos que habéis llevado a cabo. Por cierto, si veis algún error no dudéis en corregírmelo, muchas gracias.