我正在寻找使用 openssl 和 C++ 使用 sha256 创建哈希。我知道 Generate SHA hash in C++ using OpenSSL library 有一个类似的帖子,但我希望专门创建 sha256。
更新:
包含路径似乎有问题。即使我包含了,它也找不到任何 OpenSSL 函数
#include "openssl/sha.h"
我将路径包含在我的构建中
-I/opt/ssl/include/ -L/opt/ssl/lib/ -lcrypto
最佳答案
我是这样做的:
void sha256_hash_string (unsigned char hash[SHA256_DIGEST_LENGTH], char outputBuffer[65])
{
int i = 0;
for(i = 0; i < SHA256_DIGEST_LENGTH; i++)
{
sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
}
outputBuffer[64] = 0;
}
void sha256_string(char *string, char outputBuffer[65])
{
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, string, strlen(string));
SHA256_Final(hash, &sha256);
int i = 0;
for(i = 0; i < SHA256_DIGEST_LENGTH; i++)
{
sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
}
outputBuffer[64] = 0;
}
int sha256_file(char *path, char outputBuffer[65])
{
FILE *file = fopen(path, "rb");
if(!file) return -534;
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
const int bufSize = 32768;
unsigned char *buffer = malloc(bufSize);
int bytesRead = 0;
if(!buffer) return ENOMEM;
while((bytesRead = fread(buffer, 1, bufSize, file)))
{
SHA256_Update(&sha256, buffer, bytesRead);
}
SHA256_Final(hash, &sha256);
sha256_hash_string(hash, outputBuffer);
fclose(file);
free(buffer);
return 0;
}
它的名字是这样的:
static unsigned char buffer[65];
sha256("string", buffer);
printf("%s\n", buffer);
关于c++ - 使用 OpenSSL 和 C++ 生成 sha256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37126061/