ハッシュ値のチェックを簡単に行うPerlScript
インターネットからダウンロードしたデータは、ダウンロードに失敗して破壊されていたり、何者かの改ざんによって不正に改造されている場合があります。
ダウンロードしたファイルの整合性をチェックする方法の一つとしてハッシュ値による比較がありますが、これをPerlScriptで実現するサンプルです。
以下のソースはSHIFT-JISでコーディングする事を想定しています。
use Digest::MD5 qw(md5_hex); use Digest::SHA1 qw(sha1_hex); if(($ARGV[0] eq '-h') || ($ARGV[0] eq '')){ print "Usage : hashchk [FILE] [HASH]\n\n"; print "説明\n"; print " 指定ファイルから求めた16進ハッシュ値と、\n"; print " 指定の16進ハッシュ値が一致するか確認します。\n"; print " アルゴリズムはMD5とSHA-1に対応しています。\n\n"; print "コマンド例\n"; print " hashchk.pl C:\\TEST.txt da39a3ee5e6b4b0d3255bfef95601890afd80709\n"; print " hashchk.pl C:\\TEST.txt d41d8cd98f00b204e9800998ecf8427e\n"; exit(1); } $value = ''; if(! open(in,$ARGV[0])){ print "ファイル開けない\n"; exit(1); }else{ binmode(in); if(length($ARGV[1]) == 32){ $value = md5_hex(<in>); } if(length($ARGV[1]) == 40){ $value = sha1_hex(<in>); } if($value eq ''){ print "× ハッシュアルゴリズム指定が不正です。\n"; exit(1); } } close(in); if($value eq $ARGV[1]){ print "○ ハッシュ値が一致しました。\n"; exit(0); }else{ print "× ハッシュ値が一致しません。\n"; exit(1); }