#!/usr/bin/perl -w use strict; use warnings; use Crypt::CBC; use Fcntl ':flock'; use MIME::Base64; my $encodedFileName = "BFSTest_encoded.csv"; my $decodedFileName = "BFSTest_decoded.csv"; my $decryptedFileName = "BFSTest_decrypted.csv"; my $cCipher = "Blowfish"; my $cKey = q{Abcdefghijklmnopqrstuvwxyz1234567890}; my $cIV = "randomiv"; my $cObject = Crypt::CBC->new({ key => $cKey, cipher => $cCipher }); croak( "Invalid cipher type for encryption" ) unless $cObject; 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; } sub decryptNETData { my ( $length, $buffer ); print "Now DECRYPTING $decodedFileName for current client ... \n"; 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; # Tried to slurp, decrypt and decode here, but that did not work either. my $decodedFile = do { local( $/ ) ; <$fhREADFROM> } ; utf8::decode( my $str = $cObject->decrypt( $decodedFile ) ); print finalFile $str; #while (!eof($fhREADFROM)) { # $length = unpack('N', read_bytes($fhREADFROM, 4)); # $buffer = read_bytes($fhREADFROM, $length); # print finalFile $cObject->decrypt( $buffer ); #} close $fhREADFROM; close finalFile; print "Decrypted $decodedFileName to $decryptedFileName. \n"; } 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; my $utf8base64EncodedFile = do { local( $/ ) ; <$fhENCODEDFILE> } ; #utf8::decode( my $str = decode_base64($utf8base64EncodedFile) ); print $fhDECODEDFILE decode_base64($utf8base64EncodedFile); close $fhENCODEDFILE; close $fhDECODEDFILE; print "Decoded $encodedFileName to $decodedFileName. \n"; } decodeData(); decryptNETData();