static void show_pwd_r(struct s_pwd * pwd, unsigned int bs) { unsigned long long i; unsigned int k; unsigned long lvl; unsigned char curchar; unsigned int x; k=0; x=pwd->len; i = nbparts[pwd->password[pwd->len-1] + pwd->len*256 + pwd->level*256*gmax_len]; pwd->len++; lvl = pwd->level; if(bs) { while( (curchar=charsorted[ pwd->password[pwd->len-2]*256 + k ]) != pwd->password[pwd->len-1] ) { i -= nbparts[ curchar + pwd->len*256 + (pwd->level + proba2[ pwd->password[pwd->len-2]*256 + curchar ])*256*gmax_len ]; k++; } pwd->level += proba2[ pwd->password[pwd->len-2]*256 + pwd->password[pwd->len-1] ]; if(pwd->password[pwd->len]!=0) show_pwd_r(pwd, 1); i -= nbparts[ pwd->password[pwd->len-1] + pwd->len*256 + pwd->level*256*gmax_len ]; printf("%s\n", pwd->password); gidx++; k++; } pwd->password[pwd->len] = 0; while(i>1) { pwd->password[pwd->len-1] = charsorted[ pwd->password[pwd->len-2]*256 + k ]; pwd->level = lvl + proba2[ pwd->password[pwd->len-2]*256 + pwd->password[pwd->len-1] ]; i -= nbparts[ pwd->password[pwd->len-1] + pwd->len*256 + pwd->level*256*gmax_len ]; if(pwd->len<=gmax_len) { show_pwd_r(pwd, 0); } printf("%s\n", pwd->password); gidx++; k++; if(gidx>gend) return; } pwd->len--; pwd->password[pwd->len] = 0; pwd->level = lvl; }
static void show_pwd(unsigned long long start, unsigned long long end, unsigned int max_level, unsigned int max_len) { struct s_pwd pwd; unsigned int i; unsigned int bs; gmax_level = max_level; gmax_len = max_len; gend = end; gidx = start; i=0; bs = 0; if(start>0) bs = 1; if(bs) { print_pwd(start, &pwd, max_level, max_len); while(charsorted[i] != pwd.password[0]) i++; pwd.len = 1; pwd.level = proba1[pwd.password[0]]; show_pwd_r(&pwd, 1); printf("%s\n", pwd.password); i++; } while(proba1[charsorted[i]]<=max_level) { if(gidx>gend) return; pwd.len = 1; pwd.password[0] = charsorted[i]; pwd.level = proba1[pwd.password[0]]; pwd.password[1] = 0; show_pwd_rnbs(&pwd); printf("%s\n", pwd.password); gidx++; i++; } }