Я новичок в C, и я прошел курс CS50, чтобы выучить некоторые основы. Я пытался решить проблему, которая требует от вас простого взломщика паролей, но я столкнулся с проблемой, которая мешает мне написать функциональную программу: каждый раз, когда я вызываю функцию crypt в цикле for, она каким-то образом ломает мой пароль строка, через которую я перебираю.
Я попытался сделать копию строки пароля и передать ее в качестве аргумента в crypt; Я также попытался переместить вызов crypt в отдельную функцию и вызвать его из цикла (а также их комбинации)
#define _XOPEN_SOURCE
#include <unistd.h>
#include <cs50.h>
#include <stdio.h>
#include <string.h>
string buildLetterDictionary();
int main(int argc, string argv[])
{
if (argc == 2)
{
printf("Two arguments, starting test...\n");
char password[2];
string letters = buildLetterDictionary();
for(int i = 0; i < 5; i++)
{
password[0] = letters[i];
password[1] = '\0';
printf("Password: %s\n", password);
string hashed = crypt(password, "50");
printf("\n%i\nOriginal: %s\nHashed: %s\n", i, password, hashed);
}
return 0;
}
else
{
printf("Usage: ./crack hash");
return 1;
}
}
string buildLetterDictionary()
{
char letters[27];
for(int i = 65; i < 91; i++)
{
letters[i-65] = i;
}
letters[26] = '\0';
string letter = letters;
return letter;
}
если я закомментирую строки:
string hashed = crypt(password, "50");
printf("\n%i\nOriginal: %s\nHashed: %s\n", i, password, hashed);
Код работает как положено и выдает результат:
A
B
C
D
E
Но если я оставлю эти строки, пароль будет напечатан как 'A' с хешем "50pe4e2XTIS / g" в первый раз, но каждый последующий раз будет напечатан как "" с хэшем "50sXZPq5euCxs"
Пожалуйста, дайте мне знать, что является основной проблемой, чтобы я мог работать над ее решением! Спасибо за любую помощь заранее!