我使用以下脚本来获取文件的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数组进行比较。
答案 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' );