В python, чтобы получить дайджест строки байта, я делаю это
hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()
Результат: 'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
* 1007 до этого
hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()[::-1]
Результат: '2e109e97db885698cb12078e1e6dc055cd25f30c445cf8a54cb7334a'
Я хотел бы сделать то же самое в C с Openssl.
1016
#include <openssl/sha.h>
#include <openssl/opensslv.h>
#include <openssl/crypto.h>
int main()
{
unsigned char digest[SHA224_DIGEST_LENGTH];
char string[] = "Nobody inspects the spammish repetition";
SHA224((unsigned char*)&string, strlen(string), (unsigned char*)&digest);
char mdString[SHA224_DIGEST_LENGTH * 2 + 1];
for (int i = 0; i < SHA224_DIGEST_LENGTH; i++)
sprintf(&mdString[i * 2], "%02x", (unsigned int)digest[i]);
printf("SHA224 digest: %s\n", mdString);
return EXIT_SUCCESS;
}
но я не знаю, как с помощью C ++ получить тот же результат, что и обратный в python.
Как мне этого добиться?
Любая помощь будетс благодарностьюСпасибо.
Редактировать: это не то же самое, что использование std::reverse
.Это не дубликат вопроса Как изменить строку в C или C ++ ?
Мое решение: Ссылка: Обмен местамив элементе типа char
for (uint16_t j=0; j < SHA224_DIGEST_LENGTH; j++)
digest[j] = ((digest[j] & 0x0F) << 4) | ((digest[j] & 0xF0) >> 4);
std::reverse(std::begin(digest), std::end(digest));