crypt () не возвращает стандарт MD5 Ha sh? - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь использовать функцию crypt(), найденную в <crypt.h> в C, и когда я пытаюсь набрать, например, sh строку в MD5, она возвращает что-то отличное от стандартного MD5 га sh будет производиться из такого инструмента, как md5sum. Пример / Доказательство:

hash.c:

#include <stdio.h>
#include <crypt.h>

#define MD5 "$1$"

int main() {

        const char string[] = "helloworld";
        char * hash = crypt(string, MD5);

        printf("%s\n",hash);

        return 0;
}

Я компилирую с gcc -o hash hash.c -lcrypt и запускаю:

./hash
$1$$edK86ZB1Vvaz2eneY.itb.

Из моих знаний о UNIX системах, Формат вывода crypt совпадает с форматом пароля UNIX пользователей, тогда как первая часть - это ha sh ID / тип, вторая часть - это соль, а третья - это действительное га sh - $id$salt$hash. Тем не менее, АКТУАЛЬНЫЙ стандарт MD5 га sh из helloworld составляет fc5e038d38a57032085441e7fe7010b0. Есть ли способ произвести это ха sh, используя crypt()? Большое спасибо!

1 Ответ

3 голосов
/ 17 февраля 2020

Строка, возвращаемая реализацией glib c crypt() - это не просто ха sh пароля соли +, закодированного в базу 16.

Если вы посмотрите на , то Исходный код версии MD5, вы увидите среди прочего al oop, который берет предыдущий MD5 га sh и хеширует его на тысячу повторений. Затем он превращается в строку с повторным использованием функции с именем __b64_from_24bit(), которая кодирует 3 байта конечного MD5 га sh за раз (не в линейном порядке) в то, что, как я предполагаю, является основанием 64.

Вот почему то, что вы видите, не выглядит как результат md5sum или тому подобное.

...