计算和打印 SHA256 hash 提醒文件 OpenSSL
我正在尝试编写一个功能 C, 使用 OpenSSL/libcrypto, 计算总和 SHA256 文件。 我在榜样上基于我的代码 Adam Lamer c++
http://adamlamers.com/?p=5
.
这是我的代码:
问题是 this....take 查看下面的计算金额为文件示例:
我也得到了 * stack smashing detected *, 代码完成执行时。
有人看到我做错了什么吗?
谢!
http://adamlamers.com/?p=5
.
这是我的代码:
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/, "x", hash[i]/;
}
outputBuffer[64] = 0;
}
问题是 this....take 查看下面的计算金额为文件示例:
Known good SHA256: 6da032d0f859191f3ec46a89860694c61e65460d54f2f6760b033fa416b73866
Calc. by my code: 6dff32ffff59191f3eff6affff06ffff1e65460d54ffff760b033fff16ff3866
我也得到了 * stack smashing detected *, 代码完成执行时。
有人看到我做错了什么吗?
谢!
没有找到相关结果
已邀请:
2 个回复
君笑尘
赞同来自:
没有:
char hash[SHA256_DIGEST_LENGTH];
没有签名,例如:
unsigned char hash[SHA256_DIGEST_LENGTH];
帮助? /特别是在签名中
./
裸奔
赞同来自:
标志
作为整数。 如果字节是否定的,则它将转换为
/
默认参数
用于呼叫
/, 然后转换为
/通过格式说明书
/ 并印刷。
所以字节
是一个 -96 作为符号字节,转换为 -96 作为
, 那是 0xFFFFFFA0 在 hex, 所以他印刷为 FFFFFFA0.
要在打印每个字节之前修复它应记录在
:
sprintf/..., /unsigned char/hash[i]/;
你有关于打破堆栈的警告,因为最后 hash 有一个符号字节,所以你写下了 8 字节 FFFFFFB7 流离失所 58, 当你打算只写下来 2 字节。 它导致了
http://en.wikipedia.org/wiki/Buffer_overflow
, 这里发现了,因为编译器很可能插入安全区域或文件 cookie 返回值之前堆栈中的安全性,发现此安全区域发生意外更改。