带字符串的MD5十六进制验证

时间:2018-10-22 13:53:36

标签: perl

file_md5_hex( $dir )子例程的结果与从文件读取的字符串进行比较时遇到问题。 当我打印时它们是相同的,但是当我比较它们时,无论它们具有什么值,我都得到相等的时间。

elsif ( -f $dir )
{
 if($dir ne "$mydir.txt" && $dir ne "log.txt")
 {
  my $filename = "$mydir.txt";
  open(my $fh, '<:encoding(UTF-8)', $filename)
  or die "Could not open file '$filename' $!";
  print FILE "$dir -> ";
  while (my $row = <$fh>)
  {
   chomp($row);
   if($row eq $dir)
     {
      my $hash = <$fh>;
      chomp($hash);
      print FILE "$hash = ";
      break;
     }
  }
  close $fh;
   my $md5 = file_md5_hex( $dir );
   print FILE "$md5\n";
   print FILE ref($md5);
   print FILE ref($hash);
   if( $md5 eq $hash )
   {
     print FILE "Hash ok!\n";
     }
   else
   {
     print FILERESULT "In $mydir file $dir is corrupted. Correct is $hash, calculated is $md5\n";
     print FILE "Hash Nok!\n";
   }
 }
}

在日志文件中,我看到两个值$md5$hash相同或不同(取决于我模拟的情况),但是当我验证程序时,它们会始终相等。我认为数据类型可能存在问题,但我不知道如何解决。

1 个答案:

答案 0 :(得分:2)

use strict来检测具有变量名和范围的错误。 未在if( $md5 eq $hash )上定义$ hash,因为my $hash = <$fh>;在范围之外。 在my $hash之前声明while (my $row = <$fh>),并用$hash = <$fh>;

设置值

http://perldoc.perl.org/functions/my.html