Попытка взломать пароль с помощью грубой силы, но программа, похоже, не понимает, когда она нашла пароль.
Поэтому я попытался написать небольшую программу для взлома паролей с помощью грубой силы.
в основном я перебираю все буквенные комбинации, используя вложенные циклы for (пароли не должны быть длиннее 4 букв), затем я использую crypt для пароля с заданной солью (при условии, что соль исправлена), чтобы проверить, взломал ли я пароль ( У меня есть доступ к зашифрованным паролям). Теперь у меня был вывод кода, который он генерирует, и похоже, что он перебирает все строчные варианты. Но почему-то никогда не найти пароль.
Теперь я сам создал зашифрованную версию, так что я знаю, что пароль длиной 4 буквы, это не проблема, и программа, кажется, перебирает все возможности, я думаю, так в чем может быть проблема? Является ли условие if неправильным?
Теперь я думаю, что это не самое элегантное решение проблемы, но я думаю, что общая идея верна. Но если есть проблема с этим вложенным циклическим подходом, я был бы рад узнать об этом :).
#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <cs50.h>
int main(int argc, string argv[]) {
if(argc < 2) {
printf("Please enter a password to crack! \n");
return 1;
}
char s[4] = "";
for(int i = 0; i <=27; i++) {
if(i == 0)
s[0] = 0;
else
s[0] = i - 1 + 'a';
if(strcmp(crypt(s, "50"), argv[1]) == 0) {
break; }
for(int j = 0; j <=26; j++) {
if(j == 0)
s[1] = 0;
else
s[1] = (j - 1 + 'a');
if(strcmp(crypt(s, "50"), argv[1]) == 0)
break;
for(int k = 0; k <= 26; k++) {
if(k == 0)
s[2] = 0;
s[2] = (k - 1 + 'a');
if(strcmp(crypt(s, "50"), argv[1]) == 0)
break;
for(int l = 0; l <= 26; l++) {
printf("%s \n", s);
if(l == 0)
s[3] = 0;
else
s[3] = (l - 1 + 'a');
if(strcmp(crypt(s, "50"), argv[1]) == 0)
break;
}
}
}
}
if (strcmp(crypt(s, "50"), argv[1]) != 0)
printf("Password not found");
else
printf("%s \n", s);