Update.
[platform/upstream/glibc.git] / manual / examples / genpass.c
1 #include <stdio.h>
2 #include <time.h>
3 #include <unistd.h>
4 #include <crypt.h>
5
6 int 
7 main(void)
8 {
9   unsigned long seed[2];
10   char salt[] = "$1$........";
11   const char *const seedchars = 
12     "./0123456789ABCDEFGHIJKLMNOPQRST"
13     "UVWXYZabcdefghijklmnopqrstuvwxyz";
14   char *password;
15   int i;
16   
17   /* Generate a (not very) random seed.  
18      You should do it better than this...  */
19   seed[0] = time(NULL);
20   seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);
21   
22   /* Turn it into printable characters from `seedchars'.  */
23   for (i = 0; i < 8; i++)
24     salt[3+i] = seedchars[(seed[i/5] >> (i%5)*6) & 0x3f];
25   
26   /* Read in the user's password and encrypt it.  */
27   password = crypt(getpass("Password:"), salt);
28   
29   /* Print the results.  */
30   puts(password);
31   return 0;
32 }