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;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值