NAME
Filter::CBC - Source filter for Cipher Block Chaining
SYNOPSIS
use Filter::Hex; use Filter::CBC "Rijndael","my secret key";
52616e646f6d4956d6da837a7590d113f67d363b95eae044ac74937c2b7fc9dbaffb59656abebf5b69a50559bc9b4233
-or-
use Filter::CBC "Rijndael","my secret key","hex";
52616e646f6d4956d6da837a7590d113f67d363b95eae044ac74937c2b7fc9dbaffb59656abebf5b69a50559bc9b4233
-or-
# Please don't encrypt me!
use Filter::CBC "Rijndael","my secret key","hex";
# This file will be encrypted and overwritten.
# Make backups, damnit!
# Autofilter example
print "Don't try this at home, kids !";
-or-
# Please don't encrypt me!
use Filter::CBC "","","hex";
# This file will be encrypted and overwritten.
# Make backups, damnit!
# Autofilter example
# Defaults will be used
# Rijndael is default encryption algorithm
# Default keyphrase is : This space is left blank intentionally
print "Don't try this at home, kids !";
DESCRIPTION
Filter::CBC is a Source filter that uses Cipher Block Chaining (CBC) to encrypt your code. The tricky part is that most CBC Algorithms have binary output. The textmode bypasses this obstacle, by converting the data to less scary data.
DOWNSIDES
Source filters are slow. VERY Slow. Filter::CBC is not an exception. Well uhm kinda. Filter::CBC is even slower. Be warned, be VERY VERY warned.
You're source file is overwrittten when you're using the autoefilter feature.
PARAMETERS
The three parameters that can be passed along are :
- CBC Handler
-
This parameter indicates what CBC encryption routine to use. Possible values are described in the next section.
- Keyphrase
-
This parameter is the keyphrase for the encryption routine described as previous parameter.
- Text Handler
-
This optional parameter is the textmode. See INTERNAL TEXT HANDLERS
INTERNAL CBC HANDLERS
The following parameters can be passed as part of the CBC encryption routine
- Rijndael
-
This is the AES (Advanced Encryption Scheme) routine. You need Crypt::Rijndael for this.
- DES
-
This is the DES routine. You need Crypt::DES for this.
- IDEA
-
This is the IDEA routine. You need Crypt::IDEA for this.
- Blowfish
-
This is the Blowfish routine. You need Crypt::Blowfish for this.
- GOST
-
This is the GOST routine. You need Crypt::GOST for this.
- DES_EDE3
-
This is the Triple DES routine. You need Crypt::DES_EDE3 for this.
- Twofish
-
This is the Twofish routine. You need Crypt::Twofish for this.
- NULL
-
This is the NULL routine. You need Crypt::NULL for this.
- TEA
-
This is the TEA routine. You need Crypt::TEA for this.
But any CBC Compatible routine will work.
INTERNAL TEXT HANDLERS
The following parameters can be passed as part of the internal text handling.
- hex
-
If the encrypted code is converted to hex values, you need to use this parameter first. Source filters can't handle binary data properly.
- uudecode
-
uudecoding has been disabled in the current source tree.
If the encrypted code is uuencoded, you need to use this parameter first. Source filters can't handle binary data properly. Using this textmode is not recommended since the autofilter feature scans for keys which also are used in the uudecode algorithm.
If you don't pass a parameter for text handling, Filter::CBC will try to decrypt the code anyway. If the encrypted code is clean enough (for example when using Rot13 encryption), Text handling isn't necessary. In all other cases you need to stack a filter so the encrypted code is handled properly.
The following example uses Filter::Hex instead of the internal Text handler for hex converted encrypted code.
use Filter::Hex; use Filter::CBC "Rijndael","my secret key";
52616e646f6d4956d6da837a7590d113f67d363b95eae044ac74937c2b7fc9dbaffb59656abebf5b69a50559bc9b4233
AUTOFILTERING
Since Filter::CBC 0.04, using code2cbc isn't required anymore. Filter::CBC can encrypt your code on the fly if it's not yet encrypted. Be warned that your source file is overwritten. You can use cbc2code.pl to decrypt your encrypted code. BACKUP!
use Filter::CBC "Rijndael","my secret key","hex";
# This file will be encrypted and overwritten.
# Make backups, damnit!
# Autofilter example
print "Don't try this at home, kids !";
This code will be encrypted the first time you run it. Everything before the 'use Filter::CBC' line is kept intact.
DEFAULTS
Filter::CBC will use Rijndael when no encryption algorithm is defined.
- Keyphrase
Filter::CBC will use the following line when no keyphrase is defined :
This space is left blank intentionally
REQUIREMENTS
Filter::CBC requires the following modules (depending on your needs)
- Filter::Util::Call
- Crypt::CBC
- Crypt::Rijndael
- Crypt::DES
- Crypt::IDEA
- Crypt::Blowfish
- Crypt::GOST
- Crypt::DES_EDE3
- Crypt::Twofish
- Crypt::NULL
- Crypt::TEA
THANKS A MILLION
Alot of thanks to Ray Brinzer (Petruchio on Perlmonks) for giving an example on how to handle parameters with use.
TODO
A bit less then first release but still plenty.
Work around the uudecode bug.
DISCLAIMER
This code is released under GPL (GNU Public License). More information can be found on http://www.gnu.org/copyleft/gpl.html
VERSION
This is Filter::CBC 0.05.
AUTHOR
Hendrik Van Belleghem (beatnik -at- quickndirty -dot- org)
SEE ALSO
GNU & GPL - http://www.gnu.org/copyleft/gpl.html
Filter::Util::Call - http://search.cpan.org/search?dist=Filter
Crypt::CBC - http://search.cpan.org/search?dist=Crypt-CBC
Crypt::Rijndael - http://search.cpan.org/search?dist=Crypt-Rijndael
Crypt::DES - http://search.cpan.org/search?dist=Crypt-DES
Crypt::IDEA - http://search.cpan.org/search?dist=Crypt-IDEA
Crypt::Blowfish - http://search.cpan.org/search?dist=Crypt-Blowfish
Crypt::GOST - http://search.cpan.org/search?dist=Crypt-GOST
Crypt::DES_EDE3 - http://search.cpan.org/search?dist=Crypt-DES_EDE3
Crypt::Twofish - http://search.cpan.org/search?dist=Crypt-Twofish
Crypt::NULL - http://search.cpan.org/search?dist=Crypt-NULL
Crypt::TEA - http://search.cpan.org/search?dist=Crypt-TEA
Paul Marquess' article on Source Filters - http://www.samag.com/documents/s=1287/sam03030004/
2 POD Errors
The following errors were encountered while parsing the POD:
- Around line 128:
'=item' outside of any '=over'
- Around line 136:
You forgot a '=back' before '=head1'