Во-первых, sizeof
указатель даст размер указателя char
, который является размером слова в вашей машине (я полагаю, это 64-разрядный код, поскольку ваш размер вернул 8). Указатели не несут информацию о размере указателя, вам придется возвращать ее в другом месте.
В любом случае, поскольку вы знаете, что дайджест MD5 имеет 16 байтов, вы можете просто перебирать каждый из них и печатать каждый байт в более читаемом формате, используя sprintf. Примерно так:
for (int i = 0; i < 16; i++)
printf("%02x", (int)(unsigned char)digest[i]);
putchar('\n');
Если вы хотите распечатать его в файл, измените printf
на fprintf
и putchar
на fputc
(однако аргументы немного меняются).
Чтобы поместить его в строку, вам нужно sprint
каждый байт в правильной позиции строки, что-то вроде этого:
char* str = malloc(33 * sizeof(char));
for (int i = 0; i < 16; i++)
sprintf(str+2*i, "%02x", (int)(unsigned char)digest[i]);
P.S: не забудьте free
все после.