MD5驗證的Perl指令碼

來源:互聯網
上載者:User

 #!/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;
}


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.