simpleCipher.pl


#!/usr/bin/env perl

use strict;
use warnings;
use Crypt::CBC;

my $usage = "Usage: ${0} encrypt key plaintext ciphertext\n Or\n";
$usage .= "${0} decrypt key ciphertext plaintext\n";

my $sum_args = $#ARGV + 1;
if ($sum_args != 4) {
  print $usage;
  exit 0;
}

my $key = $ARGV[1];
my $cipher = Crypt::CBC->new(
  -key => "$key",
  -cipher => 'Blowfish',
  -keysize => 56
);

if ($ARGV[0] eq "encrypt") {
  my $plainfile = $ARGV[2];
  my $cipherfile = $ARGV[3];
  my $buffer;
  
  $cipher->start("e");
  open(my $p, '<', "$plainfile") or die "${plainfile}: $!";
  open(my $c, '>', "$cipherfile") or die "${cipherfile}: $!";
  while (read($p, $buffer, 1024)) {
    print $c $cipher->crypt($buffer);
  }
  close($p);
  print $c $cipher->finish;
  close($c);
}
elsif ($ARGV[0] eq "decrypt") {
  my $cipherfile = $ARGV[2];
  my $plainfile = $ARGV[3];
  my $buffer;

  $cipher->start("d");
  open(my $c, '<', "$cipherfile") or die "${cipherfile}: $!";
  open(my $p, '>', "$plainfile") or die "${plainfile}: $!";;
  while (read($c, $buffer, 1024)) {
    print $p $cipher->decrypt($buffer);
  }
  close($c);
  print $p $cipher->finish;
  close($p);
}
else {
  print $usage;
}