2

这是工作流程。

  1. 客户端上传一个 XML 文件和一个校验和 MD5 文件到我们的 FTP。
  2. Perl 服务器从 FTP 服务器复制文件。
  3. Perl 服务器对 XML 文件运行自己的 MD5 检查,然后将其与 MD5 文件中的值进行比较。

两个 MD5 哈希值从不匹配。但是,当我将 XML 文件复制到我的 Windows 机器并运行在 Windows 中运行的相同 Perl 脚本时,我得到的答案与他们的 MD5 文件相同。

谁能告诉我发生了什么事?

这是我用来计算 MD5 哈希的脚本。

use warnings;
use strict;
use Digest::MD5;
my $fname = "MarketPricePoint_2013_07_16_1500.xml";
open (my $fh, '<', $fname) or die "Can't open '$fname': $!";
binmode ($fh);
my $hash = Digest::MD5->new->addfile($fh)->hexdigest;
print $hash;
4

1 回答 1

2

ASCII 模式是执行行尾静默转换的 FTP 服务器的常见默认值。如果始终以二进制模式传输不是一个选项,请考虑规范化行尾,如下所示。

use strict;
use warnings;

use Digest::MD5;

my $fname = "MarketPricePoint_2013_07_16_1500.xml";
open (my $fh, '<', $fname) or die "$0: open $fname: $!";
binmode ($fh) or die "$0: binmode: $!";;

(my $data = do { local $/; <$fh> }) =~ s/\r\n/\n/g;

my $hash = Digest::MD5->new->add($data)->hexdigest;
print $hash, "\n";
于 2013-07-17T22:48:14.730 回答