#!/usr/bin/perl use strict; use warnings; use Crypt::CBC; use Digest::MD5 qw/md5_hex/; warn "Not enough arguments, use\naes.txt \n" if scalar @ARGV < 3; my ($password, $file_name, $action) = @ARGV; start_up($action, 0, $file_name); sub start_up { my $action = shift; my $clean_up = shift; my $file_name = shift; my $is_file = -f $file_name ? 1 : 0; return unless $is_file; $action = $action eq 'e' ? 'encrypting' : 'decrypting'; crypto($file_name, $clean_up, $action); } sub crypto { my $file = shift; my $clean_up = shift; my $action = shift; my $suffix = $action eq 'encrypting' ? 'aes' : 'no'; my $cipher = Crypt::CBC->new(-key => md5_hex($password), -cipher => 'Rijndael'); my $buffer; my $buffer_size = 1024; print "Begin $action $file..."; $cipher->start($action); open(SOURCEFILE, $file) or die $!; open DESTFILE, '>', "$file.$suffix" or die $!; while (sysread(SOURCEFILE,$buffer,$buffer_size)) { $buffer = $cipher->crypt($buffer); print DESTFILE $buffer; } close DESTFILE; close SOURCEFILE or die $!; $cipher->finish; print " done!\n"; if ($clean_up) { #... } return 1; }