我正在使用Digest :: MD5模块,并且该hexdigest为windows和linux返回不同的值。
请帮助我解决问题。
use Digest::MD5;
my $ctx=Digest::MD5->new();
open RD, "input.txt";
$ctx->addfile(*RD);
close RD;
print $ctx->hexdigest;
input.txt文件的内容如下:
hello
输出:windows
5d41402abc4b2a76b9719d911017c592
输出:Linux
af5597c29467a96523a70787c319f4db
谢谢,
Saravanan
答案 0 :(得分:6)
根据提问者给出的评论,input.txt
是在Windows中生成的,然后被复制到Linux,那么我认为问题是由Windows和Linux端到端的差异引起的,在Linux'\ n'中,Windows结尾是'\ r \ n'。因此,使用binmode()
将文件处理程序设置为二进制模式应该能够修复此问题,如{{ 3}}
这应解决问题:
#!/usr/bin/perl
use warnings;
use strict;
use Digest::MD5;
open my $fh, '<', 'input.txt' or die "Cannot open input.txt: $!";
binmode $fh, ':raw'; # <==== NOTE this binmode()
my $md5 = Digest::MD5->new;
$md5->addfile($fh);
print $md5->hexdigest, "\n";
close $fh;
答案 1 :(得分:-1)
这可能是因为每次哈希值更改时,您都可以参考此http://en.wikipedia.org/wiki/MD5