Мне пришла идея, куда интересней) Как убить двух зайцев одновременно. Создаем два потока. В первом генерируем 100 паролей и грузим их в файл pass.txt и заморажеваем операцию на определенный тайм-аут.Во-втором проверяем пароли на вход в прокси и чистим файл. и так всё по кругу, пока не подберет пароль. Убиваем вес файла, но очень долго будет проверяться. поэтому придется делать не 1 поток для проверки, а 100, на каждую проверку)
Для таких целей лучше сделать функцию генерации, с запоминанием позиции. И при каждом обращении она генерит следующую комбинацию.
Это если у тебя не изменяемая длина алфавита... Вот вывел методом тыка: Code: count - количество символов в алфавите min - минимальная длина пароля max - максимальная длина пароля // быстрое возведение в степень... как бы int st(int i,int k) { int res=1; while(k) { if(k & 1) res *=t; t *= t; k >>= 1; } return res; } int permutations(int count,int min,int max) { if(min==0) min=1; int perm=st(count,max); for(;min<max;min++) perm+=st(count,min); return perm; } Эммм, а вот сколько для этого букф надо голова уже не варит
Терабайтные файлы и куча вложенных циклов подтверждают всю опасность русских хацкеров. Для пароля постоянной длины Code: #include <stdio.h> #include <string.h> #define PASSLEN 4 int indexes[PASSLEN] = {'\0'}; int passwd_iterator(char *buff) { char alphabet[] = "abcdefghijklmnopqrstuvwxyz"; int right = PASSLEN - 1; int offset = 1; int i = 0; for (; i < PASSLEN; i++) buff[i] = alphabet[indexes[i]]; if (++indexes[right] > sizeof(alphabet) - 2) { indexes[right] = 0; offset = right - 1; while (offset > -1) { if (indexes[offset] < sizeof(alphabet) - 2) { indexes[offset]++; break; } else { indexes[offset] = 0; offset--; } } } return offset; } int main() { char buff[PASSLEN+1] = {'\0'}; int ret = 0; while (ret != -1) { ret = passwd_iterator(buff); printf("%s\n", buff); } return 0; } Почти тоже самое для пароля переменной длины. Code: #include <stdio.h> #include <string.h> #define PASSLENMAX 10 int indexes[PASSLENMAX] = {'\0'}; int passwd_iterator(char *buff, int passlen) { char alphabet[] = "abcdefghijklmnopqrstuvwxyz"; int right = passlen - 1; int offset = 1; int i = 0; for (; i < passlen; i++) buff[i] = alphabet[indexes[i]]; if (++indexes[right] > sizeof(alphabet) - 2) { indexes[right] = 0; offset = right - 1; while (offset > -1) { if (indexes[offset] < sizeof(alphabet) - 2) { indexes[offset]++; break; } else { indexes[offset] = 0; offset--; } } } return offset; } int main() { char buff[PASSLENMAX+1] = {'\0'}; int len = 1; while (len < 5) { if (passwd_iterator(buff, len) == -1) len++; printf("%s\n", buff); } return 0; }
А еще проще заюзать вот это http://www.insidepro.com/doc/003r.shtml Добавить туда минимальную и максимальную длину пасса труда не составит, а вообще все уже написано