Как я могу сделать переменную соль для использования в функции crypt в C? - PullRequest
3 голосов
/ 18 октября 2019

В качестве задания я должен найти пароль пользователя, начиная с хеша этого пароля (который был создан с использованием crypt). Итак, я пытаюсь создать переменную соль (двухбуквенную строку), которую затем склоняюсь к использованию в функции crypt, пока результат не совпадет с хешем. Однако, когда я пытаюсь сделать эту переменную солью вместо двух символов, я получаю 5/6 (даже если я определяю соль как массив размера 2). Кто-нибудь знает, как это можно исправить? Трудное объяснение, я знаю, но см. Код (и результат) ниже.

char salt[2];
for (int i = 65; i < 91; i++)
{
    salt[0] = i;
    for (int j = 65; j < 91; j++)
    {
        salt[1] = j;
        printf("%s\n", salt);
    }
}

Результат: AA �g AB �g AC �g AD �g AE �g AF �g ... ... ... ZW �g ZX �g ZY �g ZZ �g

Откуда эти дополнительные символы (= �g)?

Спасибо

1 Ответ

1 голос
/ 18 октября 2019

Вы пытаетесь напечатать salt как строку, но у вас фактически нет строки. У вас есть массив из двух символов. Строка заканчивается нулевым байтом. Передав этот массив в printf, он пытается прочитать за концом массива в поисках байта со значением 0. Чтение после конца массива вызывает неопределенное поведение , которое в этом случае проявляется как печатьдополнительные символы.

Вам необходимо добавить пробел в массиве для нулевого терминатора:

char salt[3];
salt[2] = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...