gpt4 book ai didi

使用 OpenSSL 计算并打印文件的 SHA256 哈希值

转载 作者:太空狗 更新时间:2023-10-29 16:51:10 36 4
gpt4 key购买 nike

我正在尝试使用 OpenSSL/libcrypto 编写一个 C 函数来计算文件的 SHA256 和。我的代码基于 Adam Lamer 的 C++ 示例 here .

这是我的代码:

int main (int argc, char** argv)
{
char calc_hash[65];

calc_sha256("file.txt", calc_hash);
}

int calc_sha256 (char* path, char output[65])
{
FILE* file = fopen(path, "rb");
if(!file) return -1;

char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
const int bufSize = 32768;
char* buffer = malloc(bufSize);
int bytesRead = 0;
if(!buffer) return -1;
while((bytesRead = fread(buffer, 1, bufSize, file)))
{
SHA256_Update(&sha256, buffer, bytesRead);
}
SHA256_Final(hash, &sha256);

sha256_hash_string(hash, output);
fclose(file);
free(buffer);
return 0;
}

void sha256_hash_string (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;
}

问题是这样的......看看下面的示例文件的计算总和:

Known good SHA256: 6da032d0f859191f3ec46a89860694c61e65460d54f2f6760b033fa416b73866
Calc. by my code: 6dff32ffff59191f3eff6affff06ffff1e65460d54ffff760b033fff16ff3866

当代码完成执行时,我还得到 * 检测到堆栈粉碎 *。

有人看到我做错了什么吗?

谢谢!

最佳答案

看起来你的输出中有很多'0xff' block ,并且正确字符串中的相应 block 设置了高位......可能是某处的符号扩展问题。

是否制作:

char hash[SHA256_DIGEST_LENGTH];

未签名,例如:

unsigned char hash[SHA256_DIGEST_LENGTH];

帮助? (特别是在 sha256_hash_string 的签名中。)

关于使用 OpenSSL 计算并打印文件的 SHA256 哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7853156/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com