Хэш Ripemd160 в программе C.
Я написал программу на языке Си для вычисления хэша ripemd160 на 64-байтовом массиве символов.Но это дает мне неправильный вывод. Это мой код.:
<pre>#include <stdio.h> #include <string.h> #include <openssl/ripemd.h> int main (void) { unsigned char s[7] = "37a0df85d5ccf7cb5f92b53aa3f223d76c115a844ed52d8978deecd2ecb3e406"; unsigned long n=20; unsigned char *d; unsigned char *RIPEMD160(const unsigned char *s, unsigned long n, unsigned char *d); int i; for (i = 0; i < 20; i++) printf("%02x", d[i]); putchar('\n'); return 0; }
может ли кто-нибудь сказать мне, где я ошибаюсь?
выход на этот код:
31ed4989d15e4889e24883e4f050544c8d059a01
но правильный выход должен быть:
4ecc9d3eea56b0af96b6db612b76911858dcb40d
Что я уже пробовал:
#include <stdio.h> #include <string.h> #include <openssl/ripemd.h> int main (void) { unsigned char s[7] = "37a0df85d5ccf7cb5f92b53aa3f223d76c115a844ed52d8978deecd2ecb3e406"; unsigned long n=20; unsigned char *d; unsigned char *RIPEMD160(const unsigned char *s, unsigned long n, unsigned char *d); int i; for (i = 0; i < 20; i++) printf("%02x", d[i]); putchar('\n'); return 0; }
Richard MacCutchan
Вы объявляете функцию RIPEMD160, но никогда не вызываете ее для выполнения преобразования.
Asish6542165
как я могу это назвать? Он должен быть объявлен в OpenSSL, верно? Пожалуйста, скажите мне, как я могу это сделать.
Richard MacCutchan
Точно так же, как вы вызываете любую функцию. Просмотрите документацию, установите правильные параметры и запишите все данные ответа. Вы также объявили массив s только как 7 символов, так что код даже не должен компилироваться. Я не могу понять, откуда вы получаете значения результатов.
Asish6542165
можете ли вы дать мне какой-нибудь код c для выполнения хэша ripemd160 на массиве символов на языке c? Это было бы очень полезно. пожалуйста
Richard MacCutchan
Все это объясняется здесь: ripemd(3): хэш-функция RIPEMD - 160- Man-страница Linux[^].
Asish6542165
это то же самое, что и OpenSSL "https://www.openssl.org/docs/man1.0.2/man3/RIPEMD160.html-документация, которую я должен просмотреть. Можете ли вы дать мне код, написанный в поле для комментариев
Richard MacCutchan
Вы хотите сказать, что не знаете, как написать простой вызов функции на языке Си?
Asish6542165
нет. Это немного сбивает с толку. Было бы полезно, если бы вы могли предоставить код.