Доброго времени суток! Пытаюсь написать программу для подбора пароля. Брут форс Сейчас пытаюсь написать программу для подбора значений, которые ввел пользователь. То есть пользователь вводит 8 символов (пароль) и программа путём перебора значений в массиве ищет совпадения. Вот что у меня вышло. Но не может же быть так просто! Пожалуйста подскажите что не так. Code: /***************************************************/ /* Подбор символов, которые вводит пользователь */ /***************************************************/ #include <stdio.h> #include <stdlib.h> #define NUM 94 // размер массива void fctArr(char a[NUM]); // введение и подбор значений int main(void) { char arrSym[NUM] = {'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', // массив 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '`', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '{', '}', '[', ']', '"', '|', '\\', '/', '?', ',', '.', '<', '>', ':', ';', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' }; fctArr(arrSym); // вызов функции для введения и подбора значений return 0; } void fctArr(char a[NUM]) { char sym_0, sym_1, sym_2, sym_3, sym_4, sym_5, sym_6, sym_7; int i; printf("Enter 8 symbol:\n"); scanf("%c%c%c%c%c%c%c%c", &sym_0, &sym_1, &sym_2, &sym_3, &sym_4, &sym_5, &sym_6, &sym_7); for(i = 0; i < NUM; i++) // перебирает для введенного значения значение с массива { if(sym_0 == a[i]) { printf("\n1 symbol [%c] = [%d]", a[i], i); break; } } for(i = 0; i < NUM; i++) { if(sym_1 == a[i]) { printf("\n2 symbol [%c] = [%d]", a[i], i); break; } } for(i = 0; i < NUM; i++) { if(sym_2 == a[i]) { printf("\n3 symbol [%c] = [%d]", a[i], i); break; } } for(i = 0; i < NUM; i++) { if(sym_3 == a[i]) { printf("\n4 symbol [%c] = [%d]", a[i], i); break; } } for(i = 0; i < NUM; i++) { if(sym_4 == a[i]) { printf("\n5 symbol [%c] = [%d]", a[i], i); break; } } for(i = 0; i < NUM; i++) { if(sym_5 == a[i]) { printf("\n6 symbol [%c] = [%d]", a[i], i); break; } } for(i = 0; i < NUM; i++) { if(sym_6 == a[i]) { printf("\n7 symbol [%c] = [%d]", a[i], i); break; } } for(i = 0; i < NUM; i++) { if(sym_7 == a[i]) { printf("\n8 symbol [%c] = [%d]", a[i], i); break; } } printf("\n\n"); system("pause"); }
Сам подумай, если ты будешь в своей программе сравнивать пароли, ты будешь делать это посимвольно, выводя результат верно-неверно для каждого символа?
Надо подставлять не по символьно, а слово целиком. И тупой перебор, лучше не использовать. Лучше сгенерировать словари и комбинировать слова выражения и цифры с ними. Сам ты не сможешь сразу нормально сделать. Качай исходники из интернета и разбирайся, в каждой строчке зачем так сделали. Сложится общее представление и понимание.
1. Как говорили выше, брутить посимвольно пароль заведомо неверно в большинстве случаев. Однако, например при слепой SqlInjection можно значения подбирать именно посимвольно, поэтому, в общем то, закроем на это глаза. 2. Какой смысл создавать массив с пачкой символов, если можно просто брать код символа и переводить его в соответственно символ? Ведь коды идут последовательно для каждой буквы. Таким образом, можно с помощью цикла перебрать все буквы, не создавая никаких массивов. 3. Нет предела совершенству. Твой код ещё пилить и пилить, но для начала недурно