SHA-1,RFC3174和RFC4634

时间:2011-01-21 10:24:14

标签: c sha1

社区新手,但不是编程新手。

我一直在尝试启动/运行哈希函数的集合,但我成功了。然而,我发现了一些奇怪的结果,但还没有能够指出它。 RFC4634包含SHA-1和SHA-2系列的C实现,它也可以接受传递的文件进行散列。 RFC3174包含C实现,但不处理文件流。我一直在使用RFC4634中的C实现来验证文件,但是当我将它们与SHA-1提供的哈希值进行比较时,验证过程返回了非类似的结果。

知道原因是什么?

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 */