gpt4 book ai didi

c - Windows C SHA256 无效生成问题

转载 作者:行者123 更新时间:2023-11-30 18:08:52 24 4
gpt4 key购买 nike

嘿,那里。我在创建 sha256 哈希值时遇到了一个非常奇怪的问题。我制作了一个简单的 C 控制台程序,它采用文件路径作为参数,并使用独立的 sha256 代码,可以在 here 中找到该代码。 。我在 Windows 7 x64 上使用 MinGW 5.1.6 编译了该程序。

在文件上测试程序时,生成的哈希值是错误的。我通过在文件上使用 md5deep ,然后在 Linux 下的文件上使用 sha256sum 来确保这一点。我还通过在我的 Linux 机器上使用相同的文件编译并运行相同的代码来验证这不是代码;它生成的哈希值与 md5deep 和 sha256sum 生成的哈希值相同。

我还将 Aaron Gifford 的 sha256 实现改编为我的简单程序的不同版本,并在 Windows 和 Linux 上再次进行测试,最终得到了相同的结果。

该问题是否可能是由尚未打开的编译器标志引起的?

我对 C 的了解并不惊人,对编译器选项的了解更差,因此我们将不胜感激。

简单程序的代码如下:

#include <stdio.h>
#include "sha256.h"

#define BUFLEN 16384

int main(int argc, char *argv[]) {
sha256_context ctx256;
sha256_starts(&ctx256);
int kl, l, fd;
unsigned char buf[BUFLEN];
FILE *file = (FILE*) 0;
char *filepath;

fd = fileno(stdin);

filepath = argv[1];
file = fopen(filepath, "r");

fd = fileno(file);
while ((l = read(fd, buf, BUFLEN)) > 0) {
kl += l;
sha256_update(&ctx256, buf, l);
}
fclose(file);
uint8 sha256sum[32];
sha256_finish(&ctx256, sha256sum);
int i;
for (i = 0; i < 32; i++) {
printf("%02x", sha256sum[i]);
}
printf("\n");

return 0;
}

最佳答案

二进制模式在 Linux 上会被忽略,但它适用于 Windows。有关其作用的引用,请参阅 http://msdn.microsoft.com/en-us/library/yeby3zcb%28VS.71%29.aspx 。简而言之,\r\n 在非二进制模式下被转换为\n。

关于c - Windows C SHA256 无效生成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3079921/

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