#!/usr/bin/perl -w # We expect an input file and a key $stdinlen = (stat(STDIN))[7]; if($#ARGV != 0 || $stdinlen == 0) { print "Usage: crypt.pl file < key > output\n"; exit(1); } # Open the file open(FILEIO, "<", $ARGV[0]) or die "Can't open file: $!"; $filelen = (stat(FILEIO))[7]; # Read in the key, since we can't seek on STDIN :( $keylen = ($stdinlen < $filelen) ? $stdinlen : $filelen; read(STDIN, $key, $keylen); # Read in the file, XORing each byte for($i = 0; $i < $filelen; $i ++) { read(FILEIO, $x, 1); $x ^= substr($key, $i % $keylen, 1); print $x; } close(FILEIO);