地穴蛮力永无止境的循环
crypt brute force never ending loop
我在这里绞尽脑汁,找不到解决办法。
我写这段代码是为了破解简单的 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] = '[=10=]';
strcpy(pass, str);
password = crypt(pass, salt);
if ( hash == password)
{
printf("%s\n", password);
break;
}
printf("\r%s", pass);
fflush(stdout);
}
}
}
}
}
将if in a return
中的break
更改为退出所有循环。
此外,正如评论中指出的那样:
if ( hash == password)
应该
if(!strcmp(hash,password))
因为您想比较 C 中的两个字符串。
我在这里绞尽脑汁,找不到解决办法。 我写这段代码是为了破解简单的 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] = '[=10=]';
strcpy(pass, str);
password = crypt(pass, salt);
if ( hash == password)
{
printf("%s\n", password);
break;
}
printf("\r%s", pass);
fflush(stdout);
}
}
}
}
}
将if in a return
中的break
更改为退出所有循环。
此外,正如评论中指出的那样:
if ( hash == password)
应该
if(!strcmp(hash,password))
因为您想比较 C 中的两个字符串。