hexdigest在linux和windows中为同一个文件生成不同的值

时间:2014-02-28 10:30:55

标签: perl perl-module perl-data-structures digest md5sum


我正在使用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

2 个答案:

答案 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