/* http://www.ccitt5.net/ */ /* gcc -o pwd-gen pwd-gen.c */ #include #include #include #include #define PWD_SIZE 10 /* How long password should we generate? (PWD_SIZE -2) */ /* Initialize the seed, if we're on a linux system we use /dev/urandom */ /* else we use time() (yes, this solution is ugly.) */ int initseed(void){ FILE *rd; int seed; rd=fopen("/dev/urandom","r"); if(rd!=NULL){ fread(&seed,sizeof(int),1,rd); fclose(rd); } else { seed=time(NULL); } return(seed); } /* Check that the 0-250 random value is a alphanumeric character */ /* and that it isn't in the list of "user confusing" characters */ int checkchar(int ch){ if( ((isalnum(ch)))&& (ch!='l')&&(ch!='I')&&(ch!='O')&& (ch!='0')&&(ch!='o') ) return(1); else return(0); } int main(int argc, char *argv[]){ char pwd[PWD_SIZE]; char bc[2]; int ch; int i; int x; int n_pass=5; int seed; /* We take one argument, how many passwords to generate */ /* if no value is given it defaults to 5 */ if(argc>1){ if(!isdigit(argv[1][0])){ printf("argument must be integer: %s",argv[1]); exit(-1); } n_pass=atoi(argv[1]); } /* Get initial seed */ seed=initseed(); /* make N_PASS number of loops to generate password(s) */ for(i=0;i