我在这里挠挠了很多头,找不到解决方法。
我编写此代码是为了破解简单的4个字符的密码(请参见下面的代码)。我可以看到密码是正确生成的,并且使用从A到z的字母的每种组合测试了每种可能性,但是循环永远不会结束。有人可以告诉我为什么吗?

#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <crypt.h>


int main(int argc, string argv[])
{
//check number of arguments
if( argc != 2 )
{
    printf("Usage: ./crack hash\n");
}

char str[5];
char salt[] = "..";
strncpy(salt, argv[1], 2);
string hash = argv[1];
string password = "....";
char pass[5];


//brute force loop
for( int i = 65; i < 123; i++)
{
    str[0] = i;
    for( int j = 65; j < 123; j++)
    {
        str[1] = j;
        for( int k = 65; k < 123; k++)
        {
            str[2] = k;
            for( int l = 65; l < 123; l++)
            {
                str[3] = l;
                str[4] = '\0';

                strcpy(pass, str);

                password = crypt(pass, salt);
                if ( hash == password)
                {
                    printf("%s\n", password);
                    break;
                }

                printf("\r%s", pass);
                fflush(stdout);
            }
        }
    }
}
}

最佳答案

break中的if中更改return以退出所有循环。

此外,正如评论中指出的那样:

if ( hash == password)
应该
if(!strcmp(hash,password))
因为您要比较C中的两个字符串。

关于c - crypt暴力破解永无止境,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43755074/

10-08 22:43