#!/usr/bin/perl -w use File::Basename(qw(basename)); $HASH_NUM = 5; if ($#ARGV != 3-1 && $#ARGV != 4-1) { print "Usage: ".basename($0)." HASHDATA(.dll) CSVFILE(.csv) UNIQKEYLIST(.txt) HASHNUM\n"; print "Output 3 files for protection type 02.\n"; print "HASHDATA(.dll): binary file is filled by hash of uniq key 2\n"; print "CSVFILE(.csv): csv file includes hash of uniq key 1 and uniq key 2\n"; print "UNIQKEYLIST(.txt): text file lists uniq key 1 and 2\n"; print "HASHNUM: hash number will be generated(def=$HASH_NUM)\n"; exit 1; } if ($#ARGV == 4-1) { $HASH_NUM = int($ARGV[3]); if ($HASH_NUM == 0) { die "Wrong HASHNUM($ARGV[3])"; } } # open files $HASHDATAFILE = $ARGV[0]; $CSVFILE = $ARGV[1]; $UNIQKEYLIST = $ARGV[2]; open HASHDATAFILE, ">$HASHDATAFILE" or die "Open error: $HASHDATAFILE($!)"; open CSVFILE, ">$CSVFILE" or die "Open error: $CSVFILE($!)"; open UNIQKEYLIST, ">$UNIQKEYLIST" or die "Open error: $UNIQKEYLIST($!)"; binmode HASHDATAFILE; # print header for UNIQKEYLIST ($sec,$min,$hour,$day,$month,$year,$tmp) = localtime(time); $tmp++; # avoid worning of "unused value $tmp" print UNIQKEYLIST "OutputDate : ".sprintf("%d/%02d/%02d %02d:%02d:%02d\n", $year+1900, $month+1, $day, $hour, $min, $sec); print UNIQKEYLIST "HASHDATAFILE: $HASHDATAFILE\n"; print UNIQKEYLIST "CSVFILE : $CSVFILE\n"; print UNIQKEYLIST "UNIQKEYLIST : $UNIQKEYLIST\n"; print UNIQKEYLIST "\n"; print UNIQKEYLIST "=========== uniqkey1 =========== =========== uniqkey2 ===========\n"; # create hash1 and hash2, write them onto each files use Digest::MD5 qw(md5 md5_hex); @key1ary = (); @key2ary = (); for ($i = 0; $i < $HASH_NUM; $i++) { # for generating unique key1/key2 do { $key1 = md5_hex(rand($HASH_NUM*100000)); } while (scalar(grep(/^$key1$/, @key1ary)) > 0); $key1ary[$i] = $key1; do { $key2 = md5_hex(rand($HASH_NUM*10000)); } while (scalar(grep(/^$key2$/, @key2ary)) > 0); $key2ary[$i] = $key2; print UNIQKEYLIST "$key1 $key2\n"; print CSVFILE md5_hex($key1).", $key2, , ,\n"; print HASHDATAFILE md5($key2); } print UNIQKEYLIST "\nmd5sum of $HASHDATAFILE = ".`md5sum $HASHDATAFILE`."\n"; # close all files close UNIQKEYLIST; close CSVFILE; close HASHDATAFILE;