나는 머리를 꽤 많이 긁어 모으고 해결책을 찾지 못했다. 간단한 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);
}
}
}
}
}
에서 두 문자열을 비교하려는 때문에
if (hash == password)
는if(!strcmp(hash,password))
을해야합니다. 나머지는 계속됩니다. –모든 조합을 시도한 후에 끝나야하며 끝나지 않아야합니다. 아마도 그 질문은 가난하게 말로 표현되어있을 것입니다. – AlastairG
"문자열"유형이란 무엇입니까? – AlastairG