Perl比较md5的

时间:2013-12-04 08:03:34

标签: perl md5

我使用以下脚本来获取文件的md5,并按预期运行:

use warnings;
use strict;
use Digest::MD5;

my $file = "$ARGV[0]";
open (my $fh, '<', $file) or die "Can't open '$file': $!";
binmode ($fh);

my $md5 = Digest::MD5->new->addfile($fh)->hexdigest;
print $file, "\n", $md5, "\n"; 

我想要做的是使用上面的脚本,然后将$md5与另一个已知的md5进行比较。

编辑: 我们的想法是检查某些预定义文件的有效性。我已经知道md5的“好”文件了,我只需要将已知的md5与从上面这个脚本中获得的md5进行比较。我不确定下一步该做什么。

编辑2: 我已经想出如何使用push(@array, $filehandle);将对象推入数组中我现在只需要使用预定义的md5s创建另一个数组,这引发了我的下一个问题,是否有办法查看{{1}中是否有一个条目}与array A中的 ANY 条目相同?

编辑3: 我已经想出如何实际比较两个md5这样做:

array B

但这比较了两个参数的md5。我需要弄清楚的是如何将argv0 md5与整个预定义的md5数组进行比较。

2 个答案:

答案 0 :(得分:1)

您可以将预期的MD5值作为脚本的参数:

#!/usr/bin/perl

use warnings;
use strict;
use Digest::MD5;
use Getopt::Std;

our $opt_e;

getopt( 'e:' );

my $file = "$ARGV[0]";
open( my $fh, '<', $file ) or die "Can't open '$file': $!";
binmode( $fh );

my $md5 = Digest::MD5->new->addfile( $fh )->hexdigest;
print $file, "\n", $md5, "\n";

if ( defined $opt_e ) {
  if ( $md5 eq $opt_e ) {
    print "MD5 value matches. Rejoice!\n";
  }
  else {
    print "MD5 value does not match expected\n";
  }
}

但是,之前已经使用md5sum命令完成了所有操作,所以最好还是查看它。

答案 1 :(得分:0)

这里的小脚本正是我所追求的。此代码将接受任何文件作为参数,然后它将获取该文件的md5摘要。一旦它有md5,它就会将它与整个阵列进行比较。我现在唯一的问题是......如果我有1200 md5,那会慢下来吗?我正在检查的md5将是永远不会改变的文件名。是否可以更快地添加多个数组,每个文件名一个,然后它将读取文件名并仅搜索该数组。谢谢大家的帮助,我肯定迟早会回来。大声笑

use warnings;
use strict;
use Digest::MD5;

my $file = "$ARGV[0]";
open (my $fh, '<', $file) or die "Can't open '$file': $!";
binmode ($fh);

my $md5 = Digest::MD5->new->addfile($fh)->hexdigest;

print "\n", $file, "\n", $md5, "\n";


my @array = ('d41d8cd98f00b204e9800998ecf8427e', 'd6721344ed0cdc2e8a054a68b7ebc365', 'cee8eb94fd83f8d534bc44bf136ebaa0');
    if( $md5 ~~ @array ) {
        print "matches array\n";
} else {
    print "does not match array\n";
}
system ( 'pause' );