MD5验证的Perl脚本
2008-07-28 13:01
218 查看
#!/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;
}
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;
}
相关文章推荐
- 通过smtp验证发送邮件的perl脚本
- 网站目录防篡改程序,perl web目录md5文件验证
- SQL 行转列,列转行, 带SQL脚本方便大家验证.
- 用perl操作mysql数据库的脚本
- 一段验证手机和座机的js脚本
- Perl脚本间传递参数
- Expect模块安装 Perl脚本
- [安全技术] 给cmd.exe使用加上口令(使用的是perl脚本)
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- 用perl脚本发送带附件的邮件
- 签名验证使用示例(MD5)
- 签名验证使用示例(MD5)
- 通过远程 http API 来控制 lnmp 环境的重启perl脚本
- 利用perl脚本实现跨服务器的数据转移
- js身份证验证超强脚本
- Perl 脚本报Can't locate Mail/Sender.pm 解决办法
- 用AutoIT编写的验证windows下可执行程序(*.exe)的数字签名有效性的自动化脚本
- C#调用Perl脚本
- Perl Net::openSSH 远程登录多台机器执行脚本
- ubuntu 自动更新内核脚本的perl