这个 md5 实现有缺陷吗?

is there a flaw in this md5 implementation?

我一直在研究需要 md5 计算的 bacula 云支持问题 并且一直在尝试使用 https://github.com/firebladed/bacula/blob/Branch-11.0/bacula/src/lib/md5.c 并且从 amazon s3

收到错误的 md5

所以我尝试将代码直接编译成 md5sum 可执行文件,请参阅 (Makefile)

我得到的 md5 与 ubuntu md5sum

不同
md5sum (GNU coreutils) 8.28
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Ulrich Drepper, Scott Miller and David Madore.

Example File that gets wrong md5

2521308b3fe3836623f78708a5c988d6 - ubuntu md5sum

e972192662d26a25af5fb895cf79b175 - 编译的 md5sum

正在使用简单的命令行进行测试

./md5sum <file>

编译后的md5sum

md5sum <file>

对于系统 md5sum

使用链接示例

理想情况下,如果它的一些简单的 id 喜欢修复它

您的输入文件包含 0x00 个字节,而程序使用 while(fgets(buf, ...)) } { MD5Update(..., strlen(buf)) } 个字节。 strlen 报告大小小于“行”长度(您的输入文件似乎是二进制文件),因此生成的 md5sum 是一组不同的字节。

将您的输入数据转换为文本 (cat -v part.1),然后传递给两个程序,或者用 for (int c; (c = fgetc(file)) != EOF; ) MD5Update(&ctx. &c, 1).

中的内容修复程序