嘿 . 我在制作 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;
}
1 回答
二进制模式在Linux上被忽略,但它适用于Windows . 有关它的作用的参考,请参阅http://msdn.microsoft.com/en-us/library/yeby3zcb%28VS.71%29.aspx . 简而言之,\ r \ n在非二进制模式下转换为\ n .