createpad.pl
#!/usr/bin/perl use strict; # Syntax: perl createpad.pl onetimepad_file pad_size # This creates a file with pad_size bytes of random data prefixed with a bookmark # that points to the first byte of random data. # Execution starts here &main; sub main() { my $intNumArgs = $#ARGV + 1; if ($intNumArgs != 2) { print "Syntax: perl createpad.pl onetimepad_file pad_size\n"; return 1; } # Read the arguments on the command line my $strPadFilename = $ARGV[0]; my $intPadSize = $ARGV[1]; # excludes bookmark at start of file print "Creating pad ".$strPadFilename."\n"; # Create a file for the one-time pad if (!open PAD_FILE, ">$strPadFilename") { print "ERROR:Can't create file $strPadFilename\n"; return 1; } # Handle the file as bytes instead of text binmode PAD_FILE; # Write bookmark value (32 bit) my $lngBookmark = 0x00000004; print PAD_FILE pack('L', $lngBookmark); # Write one-time pad data my $intRange = 256; for(my $intPadCount = 0; $intPadCount < $intPadSize; $intPadCount++) { my $intRandomNumber = int(rand($intRange)); print PAD_FILE pack('C', $intRandomNumber); } close PAD_FILE; print "File created\n"; return 0; }