Вырезать символы для строки в C
Вот код
#include <stdio.h>
int main()
{
char npass[] = "$1$bUZXMjKz$08Ps4NPTfj6ZNkoqrsP/D.";
char salt [12];
int i;
for (i = 0; i < 12; i++)
{
npass[i+3] = salt[i];
i++;
}
salt[12] = '\0';
puts(salt);
return 0;
}
В основном, Npass является md5crypt
результат (пароль admin). Чтобы убедиться в этом, мне нужно отделить соль от результата.
Насколько я понимаю, что строка в C
действительно char array
содержащий все буквы в одиночку (с '\0'
в конце). Я использую for
цикл, чтобы вырезать первые три символа, но я думаю, из-за ASLR
, результаты, которые я получаю, всегда случайны. На самом деле, без ASLR
Я всегда получаю один и тот же случайный результат.
2 ответа
Решение
Конечно, вы получаете "случайные" данные, вы назначаете хэш, а не соль. Вы хотите наоборот:
salt[i] = npass[i+3];
Или вы можете пропустить цикл и сделать:
memcpy(salt, npass + 3, sizeof(salt) - 1);
salt[sizeof(salt) - 1] = '\0';
Со всеми уже отмеченными ошибками и некоторыми эстетическими исправлениями вы должны получить что-то вроде этого:
#include <stdio.h>
#include <string.h>
#define SALT_N 12
int main()
{
const char npass[] = "$1$bUZXMjKz$08Ps4NPTfj6ZNkoqrsP/D.";
char salt [SALT_N+1];
memcpy(salt, npass, SALT_N);
salt[SALT_N] = '\0';
puts(salt);
return 0;
}