1

我正在尝试获取运行 php 的二进制文件的校验和

$checksum =md5_file($fname)

对于 perl

 use Digest::MD5;
 open FILE, "$fname";
 $ctx = Digest::MD5->new;
 $ctx->addfile(*FILE);
 $checksum = $ctx->hexdigest;

在返回相同校验和的小文本文件上运行它,我得到了不同的有趣结果

4

2 回答 2

3

使用 Perl,您是否确保文件句柄处于文档建议的binmode中?

在大多数情况下,您要确保 $io_handle 在将其作为参数传递给 addfile() 方法之前处于 binmode。

我修改了文档中的示例以匹配您的示例:

use Digest::MD5;
open (my $fh, '<', $fname) or die "Can't open '$fname': $!";
binmode ($fh);
my $checksum = Digest::MD5->new->addfile($fh)->hexdigest;
于 2013-02-04T20:15:42.877 回答
2

您应该binmode(FILE)在打开文件后使用。如果您仍然与该更改存在差异,请查看您的 PHP 代码,因为更新的 Perl 代码会产生正确的输出:

$ perl dm.pl .bashrc
f5bb0773a3346814d978f9a155176d8e

$ md5sum .bashrc
f5bb0773a3346814d978f9a155176d8e *.bashrc
于 2013-02-04T20:23:05.133 回答