#include #include #include #include int str_to_int(char* str) { int output = 0; for (int i = 0; i < strlen(str); i++) { output *= 10; output += str[i] - '0'; } return output; } void invalid_args(int argc) { if (argc < 4 && argc > 5) { printf("nuhuh\n"); exit(1); } } char* character_list(int argc, char** argv) { const char uppercase[] = "QWERTZUIOPASDFGHJKLYXCVBNM"; const char lowercase[] = "qwertzuiopasdfghjklyxcvbnm"; const char symbols[] = "/!?._-#&"; const char numbers[] = "0123456789"; char* output; if (argc == 4) { int final_size = 0; for (int i = 0; argv[3][i] != '\0'; i++) { switch (argv[3][i]) { case 'U': final_size += sizeof(uppercase) - 1; break; case 'L': final_size += sizeof(lowercase) - 1; break; case 's': final_size += sizeof(symbols) - 1; break; case 'n': final_size += sizeof(numbers) - 1; break; } } output = malloc(sizeof(char) * (final_size + 1)); int copy_index = 0; for (int i = 0; argv[3][i] != '\0'; i++) { const char* current_list; int size; switch (argv[3][i]) { case 'U': current_list = uppercase; size = sizeof(uppercase); break; case 'L': current_list = lowercase; size = sizeof(lowercase); break; case 's': current_list = symbols; size = sizeof(symbols); break; case 'n': current_list = numbers; size = sizeof(numbers); break; } for (int j = 0; j < size - 1; j++) { output[copy_index] = current_list[j]; copy_index++; } output[final_size] = '\0'; } } return output; } int random_len(int min_length, int max_length) { return rand() % (max_length - min_length + 1) + min_length; } char* random_str(int length, char* symbols) { char* str = malloc(sizeof(char) * (length + 1)); for (int i = 0; i < length; i++) { int index = rand() % strlen(symbols); str[i] = symbols[index]; } str[length] = '\0'; return str; } int main(int argc, char** argv) { invalid_args(argc); srand(time(NULL)); int min_length = str_to_int(argv[1]); int max_length = str_to_int(argv[2]); int length = random_len(min_length, max_length); if (argc == 4) { char* password = random_str(length, character_list(argc, argv)); puts(password); free(password); } }