Реализация хэша Sha256 и ripemd160 на языке Си.
Мне нужна некоторая помощь с реализацией хэша sha256 и ripemd160 в программе c. Кто-нибудь знает, как я могу выполнить sha256 на массиве символов? Я написал код
<pre>#include <stdio.h> #include <string.h> #include <openssl/sha.h> int main (void) { const char s[131] = "0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6"; unsigned char *d = SHA256(s, strlen(s), 0); int i; for (i = 0; i < SHA256_DIGEST_LENGTH; i++) printf("%02x", d[i]); putchar('\n'); return 0; }
проблема в том, что этот код дает неправильный вывод, когда длина массива символов s увеличивается.
Если вы замените открытый ключ любой строкой, которая достаточно мала, он будет работать правильно.
Но я не могу понять, как я могу сделать это с большими массивами символов. Любые предложения или код будут полезны.
А также хочу помочь с тем, как сделать хэш ripemd160 на результирующем исходе sh256 на языке Си.
Вы можете скомпилировать приведенный выше код с помощью этой команды
gcc test.c -lssl -lcrypto
Что я уже пробовал:
<pre lang="text"><pre>include <stdio.h> #include <string.h> #include <openssl/sha.h> int main (void) { const char s[131] = "036EAF0968AA895ADDFEE599566F0B880242461D1377F4887C9B84631E13067B96"; unsigned char *d = SHA256(s, strlen(s), 0); int i; for (i = 0; i < SHA256_DIGEST_LENGTH; i++) printf("%02x", d[i]); putchar('\n'); return 0; }
итог этой трески таков
d1b9207a2144271601f7fab515d60aeef167c919a1f78560314106576ada35ec
и это правильно.
но доза не работает с несжатой формой открытого ключа биткоина.