我正在尝试将校验和放在二进制文件之前 运行php的
$checksum =md5_file($fname)
和perl
use Digest::MD5;
open FILE, "$fname";
$ctx = Digest::MD5->new;
$ctx->addfile(*FILE);
$checksum = $ctx->hexdigest;
我得到了不同的结果 有趣的是在一个小文本文件上运行它返回相同的校验和
答案 0 :(得分:3)
使用Perl,您是否确保文件句柄位于binmode中the documentation建议?
在大多数情况下,您希望在将io_handle作为参数传递给addfile()方法之前确保$ io_handle在binmode中。
我修改了文档中的示例以匹配您的示例:
use Digest::MD5;
open (my $fh, '<', $fname) or die "Can't open '$fname': $!";
binmode ($fh);
my $checksum = Digest::MD5->new->addfile($fh)->hexdigest;
答案 1 :(得分:2)
打开文件后应使用binmode(FILE)
。如果您仍然与该更改存在差异,请查看您的PHP代码,因为更新的Perl代码会生成正确的输出:
$ perl dm.pl .bashrc
f5bb0773a3346814d978f9a155176d8e
$ md5sum .bashrc
f5bb0773a3346814d978f9a155176d8e *.bashrc