2


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

输出:窗户

5d41402abc4b2a76b9719d911017c592

输出:Linux

af5597c29467a96523a70787c319f4db

谢谢,
萨拉瓦南

4

2 回答 2

6

根据提问者给出的评论,input.txt是在windows中生成的,然后复制到linux,那么我认为问题是由于windows和linux end-of-line的不同造成的,在windows中的end-of-line是' \r\n',在 Linux '\n' 中。因此,使用binmode()将文件处理程序设置为二进制模式应该能够解决此问题,如Digest::MD5.

这应该可以解决问题:

#!/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;
于 2014-02-28T11:10:27.170 回答
-1

那可能是因为每次哈希值发生变化,你可以参考这个http://en.wikipedia.org/wiki/MD5

于 2014-02-28T11:55:43.690 回答