Выполнение хэша SHA256 в дайджесте сообщений RIPEMD160

Я пытаюсь выполнить хэш SHA256 в дайджесте сообщения хэша RIPEMD 160. Я использую библиотеку OpenSSL на платформе Mac.
Проблема, с которой я столкнулся, — это промежуточный процесс получения дайджеста сообщений RIPEMD 160 и последующего выполнения другого хэша SHA256. До сих пор я был в состоянии выполнить только 1) хэш SHA256 для строки, 2) хэш RIPEMD160 для строки в отдельности. Мне нужно выполнить хэш RIPEMD160 для предыдущего дайджеста сообщения SHA256, а затем выполнить второй хэш SHA256 для дайджеста RIPEMD 160 ……

Дайджест SHA256 -> хэш-функция RIPEMD160 -> Дайджест RIPEMD160 -> 2-я хэш-функция SHA256. Я надеюсь это имеет смысл….?

string sha256(const string str)
{
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, str.c_str(), str.size());
SHA256_Final(hash, &sha256);
stringstream ss;

for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
{

ss << hex << setw(2) << setfill('0') << (int)hash[i];
}
return ss.str();

}

 int main()
{

unsigned char digest[RIPEMD160_DIGEST_LENGTH];

char string[] = "hello world";

RIPEMD160((unsigned char*)&string, strlen(string), (unsigned
char*)&digest);

char mdString[RIPEMD160_DIGEST_LENGTH*2+1];

for(int i = 0; i < RIPEMD160_DIGEST_LENGTH; i++)
sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);

printf("RIPEMD160 digest: %s\n", mdString);

return 0;

}

0

Решение

Код для хэш-функции SHA256 только для строки

SHA256 не работает на струнах. SHA256 работает на байтах. К сожалению, в C они часто имеют одинаковый тип данных.

После того как вы оставите Цезаря и Вигенере за криптографией, она не будет работать со строками. Это очень важно помнить.


Если предположить, что ваши входные данные являются текстовой строкой, и в настоящее время они представлены в ожидаемой кодировке (US-ASCII / ISO-8859-1 / UTF-8), то после исправления некоторых некорректных указателей ваш код в порядке:

unsigned char digest[RIPEMD160_DIGEST_LENGTH];
...
RIPEMD160((unsigned char*)string, strlen(string), (unsigned char*)digest);

Сейчас digest содержит ваш дайджест RIPEMD160. Напомним, что криптография работает только с байтами, а дайджест — байтами, и мы получаем

unsigned char hash[SHA256_DIGEST_LENGTH];

SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, digest, RIPEMD160_DIGEST_LENGTH);
SHA256_Final(hash, &sha256);

Или версия ускорителя, как вы сделали с RIPEMD160:

unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256(digest, RIPEMD160_DIGEST_LENGTH, hash);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]