OpenSSL имеет ужасную документацию без примеров кода, но вот вы:
#include <openssl/sha.h>
bool simpleSHA256(void* input, unsigned long length, unsigned char* md)
{
SHA256_CTX context;
if(!SHA256_Init(&context))
return false;
if(!SHA256_Update(&context, (unsigned char*)input, length))
return false;
if(!SHA256_Final(md, &context))
return false;
return true;
}
Использование:
unsigned char md[SHA256_DIGEST_LENGTH]; // 32 bytes
if(!simpleSHA256(<data buffer>, <data length>, md))
{
// handle error
}
После этого md
будет содержать двоичный дайджест сообщения SHA-256. Аналогичный код можно использовать для других членов семейства SHA, просто замените «256» в коде.
Если у вас есть большие данные, вы, конечно, должны передавать данные по мере их поступления (несколько вызовов SHA256_Update
).