对社区来说是新的,但对编程来说不是新的。
我一直在尝试建立/运行一组哈希函数,但我成功了。然而,我发现了一些奇怪的结果,还不能确定。RFC4634包含一个针对SHA-1和SHA-2系列的C实现,它还可以接受正在传递的文件进行散列。RFC3174包含一个C实现,但不处理文件流。我一直在使用RFC4634的C实现来验证文件,但是当我将它们与SHA-1提供的散列进行比较时,验证过程返回了不相似的结果。
你知道原因是什么吗?
发布于 2011-01-21 18:32:53
你有没有检查你打开的文件是ASCII模式还是二进制模式?行结束转换可以在计算散列之前执行。
更新:
我刚刚编译了RFC4634 shatest并尝试了一个示例文本文件。只要没有换行符,所有工具都会同意。插入换行符后,结果将取决于:如果文本文件使用CR和LF (DOS模式),则shatest将生成不同的结果。如果行尾只是LF (UNIX),它仍然与其他工具一致。
更新2:
在RFC4634的文件shatest.c中,在函数hashfile(...)中,将fopen设置为二进制模式:
FILE *hashfp = (strcmp(hashfilename, "-") == 0) ? stdin :
fopen(hashfilename, "rb");
/* ^ HERE */https://stackoverflow.com/questions/4757655
复制相似问题