社区新手,但不是编程新手。
我一直在尝试启动/运行哈希函数的集合,但我成功了。然而,我发现了一些奇怪的结果,但还没有能够指出它。 RFC4634包含SHA-1和SHA-2系列的C实现,它也可以接受传递的文件进行散列。 RFC3174包含C实现,但不处理文件流。我一直在使用RFC4634中的C实现来验证文件,但是当我将它们与SHA-1提供的哈希值进行比较时,验证过程返回了非类似的结果。
知道原因是什么?
答案 0 :(得分:2)
您是否检查过您是以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 */