MD5驗證的Perl腳本

 #!/opt/perl/bin/perl -w

use strict;

use Digest::MD5 qw(md5 md5_hex md5_base64);

#校驗文件函數
sub calc_md5_hex() {
    my ($file_name, $ctx, $md5);
   
    ( $file_name ) = @_;
   
 open (FILEHANDLE,$file_name) or die "Can't open /'$file_name/': $!";
 $ctx = Digest::MD5->new;
 binmode(FILEHANDLE);
 $ctx->addfile( *FILEHANDLE ) || die "$!/n";
 $md5 = $ctx->hexdigest;
 close FILEHANDLE;
   
    return $md5;
}

sub calc_md5_ASCII() {
    my ($file_name, $ctx, $md5);
   
    ( $file_name ) = @_;
   
 open (FILEHANDLE,$file_name) or die "Can't open /'$file_name/': $!";
 $ctx = Digest::MD5->new;
 #binmode(FILEHANDLE);
 $ctx->addfile( *FILEHANDLE ) || die "$!/n";
 $md5 = $ctx->hexdigest;
 close FILEHANDLE;
   
    return $md5;
}

#定義目錄路徑
my $dirhandle = $ARGV[0];
#my $file_only = $ARGV[1]; #定義是否只是文件測試,給驗證單個文件調用

if ( -f $dirhandle ){
    my $file_md5;
    if ( -T $dirhandle ) {
        $file_md5 = &calc_md5_ASCII($dirhandle);
    }elsif( -B $dirhandle ){
        $file_md5 = &calc_md5_hex($dirhandle);
    }
   
    print "開始計算文件MD5值:/n${dirhandle}/n/t[${file_md5}][MD5_hex]/n";
   
    exit 0;
}elsif( -d $dirhandle ){
    my $file_md5;
    print "開始驗證目錄下所有文件:/n";
    opendir (DH,"$dirhandle") or die "Can't oprn dir /'$dirhandle/': $!";
   
    foreach my $file ( readdir DH ){
     $file=$dirhandle.'/'.$file;
   
     if ( -f $file ){
      next if ($file =~ m{/.$} || $file =~ m{/..$} || -l $file );
      
            if ( -T $file ) {
                #print "按照文本文件進行計算MD5!/n";
                $file_md5 = &calc_md5_ASCII($file);
                print "開始計算文件MD5值:/n${file}/n/t[${file_md5}][MD5_ascii]/n";
            }elsif( -B $file ){
                #print "按照二進制文件進行計算MD5!/n";
                $file_md5 = &calc_md5_hex($file);
                print "開始計算文件MD5值:/n${file}/n/t[${file_md5}][MD5_hex]/n";
            }else{
                print "不能識別文件文件爲二進制還是文本,按照二進制文件進行計算!/n";
                $file_md5 = &calc_md5_hex($file);
                print "開始計算文件MD5值:/n${file}/n/t[${file_md5}][MD5_hex]/n";
            }
     }
    }
   
    closedir DH;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章