#include #include #include #include #include const char* salt_chars = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; void getsalt(char s[]) { int n; n = strlen(salt_chars); s[0] = salt_chars[(int)((double)rand() / (double)RAND_MAX * n)]; s[1] = salt_chars[(int)((double)rand() / (double)RAND_MAX * n)]; } int read_string(const char* prompt, char* buff, size_t maxlen) { size_t len; fputs(prompt, stdout); fflush(stdout); if(fgets(buff, maxlen, stdin) == NULL) return 0; len = strlen(buff); if(len > 0 && buff[len - 1] == '\n') buff[len - 1] = '\0'; rewind(stdin); return 1; } int main(int argc, char** argv) { char pass[9]; char salt[11]; time_t t; srand(time(&t)); if(!read_string("Password: ", pass, 9)) { putchar('\n'); exit(1); } if(argc >= 2) { salt[0] = argv[1][0]; if(argv[1][1]) salt[1] = argv[1][1]; else salt[1] = salt[0]; } else getsalt(salt); salt[2] = '\0'; printf("%s\n", crypt(pass, salt)); return 0; }