perl和php md5文件校验和不匹配

时间:2013-02-04 20:09:09

标签: php perl md5

我正在尝试将校验和放在二进制文件之前 运行php的

$checksum =md5_file($fname)

和perl

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

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

2 个答案:

答案 0 :(得分:3)

使用Perl,您是否确保文件句柄位于binmodethe 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