CS50 Почему мой код не может взломать четырехзначный пароль? - PullRequest
0 голосов
/ 03 ноября 2018

Я столкнулся с проблемой в C, которая удерживала меня последние 6 часов, и после исследований и исследований я решил обратиться за помощью! Извините, мой английский не мой родной язык, и я начинающий программист.

Я могу взломать все пароли длиной в три цифры. Тем не менее, похоже, что я не могу взломать пароли длиной четыре цифры. Я старался изо всех сил, чтобы понять и понять свои ошибки в коде, но, похоже, я не могу этого сделать. Пожалуйста, помогите!

Кроме того, было бы очень хорошо, если бы было больше объяснений, почему я не могу взломать пароли из четырех цифр вместо простого решения. Заранее спасибо!

#define _XOPEN_SOURCE
#include <stdio.h>
#include <string.h>
#include <cs50.h>
#include <crypt.h>
#include <unistd.h>

int main (int argc, char* argv[])
{

    if (argc != 2){
        printf("Invalid input\n");
        return 1;
    }

    char* hash = argv[1];
    char code[4];
    char* alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int length = strlen(alphabet);

    for (int a = 0; a <= length; a++)
    {
        code[0] = alphabet[a];
        printf("%s\n", code);
        if (strcmp(crypt(code, "50"), hash) == 0)
        {
            printf("%s\n", code);
            return 0;
        }

        for (int b = 0; b <= length; b++)
        {
            code[1] = alphabet[b];
            //printf("%s\n", code[1]);
            if (strcmp(crypt(code, "50"), hash) == 0)
            {
                printf("%s\n", code);
                return 0;
            }

            for (int c = 0; c <= length; c++)
            {
                code[2] = alphabet[c];
                //printf("%s\n", code[2]);
                if (strcmp(crypt(code, "50"), hash) == 0)
                {
                    printf("%s\n", code);
                    return 0;
                }

                for (int d = 0; d <= length; d++)
                {
                    code[3] = alphabet[d];
                    //printf("%s\n", code[3]);
                    if (strcmp(crypt(code, "50"), hash) == 0)
                    {
                        printf("%s\n", code);
                        return 0;
                    }
                }
            }
        }
    }
}
...