2014-01-05 4 views
2

Итак, на данный момент эта программа выводит пароль с 5 верхним символом, 5 строчными символами и 2 номерами .. но я также хочу добавить случайный символ из списка, например! $%^& *() + = <>?/@ Могу ли я добавить его в цикле for, таком как числа и символы?Добавление случайного символа к паролю в C

Это мой код до сих пор:

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

FILE*fp; 

int main(void) { 

char password[5 + 5 + 2 + 1]; 
int i, j=0, len=sizeof(password)-1; 
int menuNum = 0; 


fp = fopen("passwords.txt", "a+"); 
//Opens the text file to save the Passwords 

srand(time(NULL)); 
printf("  Main Menu\n"); 
printf("********************************\n"); 
printf("\nEnter 1 to Generate a New Password: "); 
printf("\n\n"); 
printf("Enter 2 to Check Old Passwords: "); 
printf("\n\n"); 
printf("Enter 3 to Exit. "); 
printf("\n\n"); 
scanf("%d", &menuNum); // reads number 

if (menuNum == 1) 
{ 
    printf("********************************\n"); 
    printf("\nYour New Password is: \n\n"); 

//Each Password will Have 13 Characters(5 Upper, 5 Lower, 2 Numbers & 1 Symbol) 

for (i = 0; i < 5; ++i) 
    password[j++] = 'a' + rand() % ('z' - 'a' + 1); //Generates 5 random Lowercase characters 

for (i = 0; i < 5; ++i) 
    password[j++] = 'A' + rand() % ('Z' - 'A' + 1); //Generates 5 random Uppercase characters 

for (i = 0; i < 2; ++i) 
    password[j++] = '0' + rand() % ('0' - '9' + 1); //Generates 2 random numbers 

password[j] = '\0'; 
for(i = 0; i < sizeof(password)-1; ++i) 
    { 
    char c = password[i]; 
    j = rand() % len; 
    password[i] = password[j]; 
    password[j] = c; 
    } 

printf("%s\n\n", password); 
printf("********************************\n"); 
fprintf(fp, "\n%s", password); //Outputs the Generated Passoword to the text file 
fclose(fp); //Closes the text file 
system("pause"); 
} 

}

+0

Создайте массив этих символов и создайте случайное число в диапазоне массива. –

+1

'' 'может быть проблематично использовать с' char' – anatolyg

+0

Итак, если я добавлю массив вроде: char symbols [] = {"! $%^& *() _ + = @ # ~> DigitalD

ответ

1

использовать что-то вроде этого:

char *special_stuff = "!$%^&*()+=<>?/@"; 

... 
password[j++] = special_stuff[rand() % strlen(special_stuff)]; 

(я удалил £ характер, так как это может создать все виды проблем вы, например, с многобайтовым кодированием).

Смежные вопросы