【发布时间】:2013-07-17 22:37:38
【问题描述】:
这是工作流程。
- 客户端将一个 XML 文件和一个校验和 MD5 文件上传到我们的 FTP。
- Perl 服务器从 FTP 服务器复制文件。
- 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;
【问题讨论】:
-
文件是如何通过FTP传输的?二进制还是文本模式?后者改变行尾,从而改变校验和
-
行尾(i.e.、
"\r\n"与"\n")约定在两边是否相同?请记住,FTP 中的 ascii 模式会执行此转换。