2017-10-12 1 views
-2

Ich habe zwei Variablen auf meinem Code möchte ich gegeneinander überprüfen, aber wenn ich das tue, wird die if-Anweisung falsch einer von ihnen ist eine char-Eingabe [], gezogen von argv [1] und in eine Funktion zugeführt, und das andere ist das Ergebnis der Krypta (Pass Salz)Verwendung von gleich zu Operator in c

static const char alphabet1[] = 
     "a"; 


void mycrack(char input[]) 
{ 
    char pass[5]; 
    pass[4] = '\0'; 
    char salt[3]; 
    salt[0] = input[0]; 
    salt[1] = input[1]; 
    salt [2] = '\0'; 

    for (int a = 0, size = sizeof(alphabet1); a < size - 1; ++a) { 
     for (int b = 0, size = sizeof(alphabet1); b < size - 1; ++b) { 
      for (int c = 0, size = sizeof(alphabet1); c < size - 1; ++c) { 
       for (int d = 0, size = sizeof(alphabet1); d < size - 1; ++d) { 

        pass[0] = alphabet1[a]; 
        pass[1] = alphabet1[b]; 
        pass[2] = alphabet1[c]; 
        pass[3] = alphabet1[d]; 
        char* hash = crypt(pass,salt); 
        printf("pass:%s  salt:%s   hash:%s   input:%s\n",pass,salt,hash,input); 
        if(hash == input){ 
         printf("you got it %s",pass); 
         exit(0); 
        }  
       } 
      } 
     } 
    } 
} 
int main(int argc, string argv[1]) 
{ 
    mycrack(argv[1]); 

    return 0; 

der Strom heraus gesetzt (da 50k72iioeOiJU ist der Eingang) ist

pass:aaaa  salt:50   hash:50k72iioeOiJU   input:50k72iioeOiJU 

während, Da Hash und Eingabe gleich sind, wäre die erwartete Ausgabe

pass:aaaa  salt:50   hash:50k72iioeOiJU   input:50k72iioeOiJU 
you got it aaaa 
+0

Was die Verwendung einer Schleife ist, dass nur ein einziges Mal iteriert (wie Sie)? –

Antwort

1

hash und input sind char* s - wenn Sie den == Operator zwischen ihnen verwenden Sie überprüfen eigentlich, dass beiden Zeiger auf die gleiche Speicheradresse zeigen, was sie offensichtlich nicht tun. Stattdessen sollten Sie den Inhalt der Zeichenfolgen vergleichen, auf die sie verweisen. Unter der Annahme, diese sind Standard, null terminierte Strings, könnten Sie strcmp

if (strcmp(hash, input) == 0) { 
    printf("you got it %s", pass); 
    exit(0); 
} 
+0

danke für die Antwort, die ich hatte Eine vage Vorstellung davon, aber ich war nicht in der Lage, die Ausgabe aus der Krypta einem Argument zuzuordnen, also musste ich einen Zeiger verwenden. –