Windows C SHA256无效生成问题

Windows C SHA256无效生成问题,c,windows,linux,mingw,sha256,C,Windows,Linux,Mingw,Sha256,你好。我在创建sha256散列时遇到了一个非常奇怪的问题。我制作了一个简单的C控制台程序,它将文件路径作为参数,并使用可以找到的独立sha256代码。我在Windows7x64上使用MingW5.1.6编译了这个程序 在文件上测试程序时,结果哈希是错误的。我在文件上使用了md5deep,然后在Linux下的文件上使用了sha256sum来确保这一点。 我还通过使用相同的文件在我的Linux机器上编译和运行相同的代码来验证它不是代码;它生成的哈希与md5deep和sha256sum生成的哈希相同

你好。我在创建sha256散列时遇到了一个非常奇怪的问题。我制作了一个简单的C控制台程序,它将文件路径作为参数,并使用可以找到的独立sha256代码。我在Windows7x64上使用MingW5.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;
}
#包括
#包括“sha256.h”
#定义BUFLEN 16384
int main(int argc,char*argv[]){
sha256_上下文ctx256;
sha256_启动(&ctx256);
内景kl、l、fd;
无符号字符buf[BUFLEN];
文件*文件=(文件*)0;
char*filepath;
fd=文件号(标准输入);
filepath=argv[1];
file=fopen(文件路径,“r”);
fd=文件号(文件);
而((l=read(fd,buf,BUFLEN))>0){
kl+=l;
sha256_更新(&ctx256,buf,l);
}
fclose(文件);
uint8 sha256sum[32];
sha256_饰面(&ctx256,sha256sum);
int i;
对于(i=0;i<32;i++){
printf(“%02x”,sha256sum[i]);
}
printf(“\n”);
返回0;
}

二进制模式在Linux上被忽略,但它适用于Windows。有关其功能的参考,请参阅。简而言之,\r\n会在非二进制模式下被转换为\n。

您应该真正以二进制模式(“rb”)打开文件,这样不同的行尾不会给您带来问题。您相信已经解决了吗?我对代码非常熟悉,以至于文件模式完全超出了我的理解范围。谢谢你发现它!