sub encryptData { my ( $cObject ) = @_; my $buffer; open(PLAINTEXT, "<", $plaintextReadFileName) || die("Cannot open file $plaintextReadFileName"); binmode PLAINTEXT; flock PLAINTEXT, LOCK_SH; open(my $fhENCRYPTEDFILE, ">", $encryptedFileName) || die("Cannot open file $encryptedFileName"); binmode $fhENCRYPTEDFILE; flock $fhENCRYPTEDFILE, LOCK_EX; while (read(PLAINTEXT,$buffer,4)) { utf8::encode($buffer) if ($type eq "utf8base64"); $buffer = $cObject->encrypt($buffer); print $fhENCRYPTEDFILE (pack('N', length($buffer)), $buffer); } close PLAINTEXT; close $fhENCRYPTEDFILE; print "Encrypted $plaintextReadFileName to $encryptedFileName."; } sub encodeData { open(my $fhENCRYPTEDFILE, "<", $encryptedFileName) || die("Cannot open file $encryptedFileName"); binmode $fhENCRYPTEDFILE; flock $fhENCRYPTEDFILE, LOCK_EX; open(my $fhENCODEDnENCRYPTEDFILE, ">", $encodedFileName) || die("Cannot open file $encodedFileName"); binmode $fhENCODEDnENCRYPTEDFILE; flock $fhENCODEDnENCRYPTEDFILE, LOCK_EX; if ($type eq "utf8base64") { $utf8base64EncryptedFile = do { local( $/ ) ; <$fhENCRYPTEDFILE> } ; print $fhENCODEDnENCRYPTEDFILE encode_base64($utf8base64EncryptedFile); } close $fhENCRYPTEDFILE; close $fhENCODEDnENCRYPTEDFILE; print "Encoded $encryptedFileName to $encodedFileName."; } sub decodeData { open(my $fhENCODEDFILE, "<", $encodedFileName) || die("Cannot open file $encodedFileName"); binmode $fhENCODEDFILE; flock $fhENCODEDFILE, LOCK_EX; open(my $fhDECODEDFILE, ">", $decodedFileName) || die("Cannot open file $decodedFileName"); binmode $fhDECODEDFILE; flock $fhDECODEDFILE, LOCK_EX; $utf8base64EncodedFile = do { local( $/ ) ; <$fhENCODEDFILE> } ; print $fhDECODEDFILE decode_base64($utf8base64EncodedFile); close $fhENCODEDFILE; close $fhDECODEDFILE; print "Decoded $encodedFileName to $decodedFileName."; } sub decryptData { my $cObject = shift; my ( $length, $buffer ); open( my $fhREADFROM, "<", $decodedFileName ) || die("Cannot open encrypted file $decodedFileName"); binmode $fhREADFROM; flock $fhREADFROM, LOCK_SH; open( finalFile, ">", $decryptedFileName ) || die("Cannot open file $decryptedFileName to write decrypted contents"); binmode finalFile; flock finalFile, LOCK_EX; while (!eof($fhREADFROM)) { $length = unpack('N', read_bytes($fhREADFROM, 4)); $buffer = read_bytes($fhREADFROM, $length); utf8::decode( my $str = $cObject->decrypt( $buffer ) ); print finalFile $str; } close $fhREADFROM; close finalFile; print "Decrypted $decodedFileName to $decryptedFileName."; } sub read_bytes { my ($fh, $to_read) = @_; my $buf = ''; while ($to_read) { my $bytes_read = read($fh, $buf, $to_read, length($buf)); die("$!\n") if !defined($bytes_read); die("Unexpected end of file\n") if !$bytes_read; $to_read -= $bytes_read; } return $buf; } encryptData($cObject); encodeData() if ($type eq "utf8base64"); decodeData() if ($type eq "utf8base64"); decryptData($cObject);