NAME
Mcrypt - Perl extension for the Mcrypt cryptography library
SYNOPSIS
use Mcrypt;
# Procedural routines
$td = Mcrypt::mcrypt_load($algorithm, $algorithm_dir,
$mode, $mode_dir);
Mcrypt::mcrypt_get_key_size($td); # in bytes
Mcrypt::mcrypt_get_iv_size($td); # in bytes
Mcrypt::mcrypt_get_block_size($td); # in bytes
Mcrypt::mcrypt_init($td, $key, $iv);
$encryptedstr = Mcrypt::mcrypt_encrypt($td, $decryptedstr);
$decryptedstr = Mcrypt::mcrypt_decrypt($td, $encryptedstr);
Mcrypt::mcrypt_end($td);
# Object-oriented methods
$td = Mcrypt->new( algorithm => $algorithm,
mode => $mode );
$keysize = $td->{KEY_SIZE};
$ivsize = $td->{IV_SIZE};
$blksize = $td->{BLOCK_SIZE};
$td->init($key, $iv);
$encryptedstr = $td->encrypt($decryptedstr);
$decryptedstr = $td->decrypt($encryptedstr);
# If the $td goes out of context,
# the destructor will do this for you
$td->end();
DESCRIPTION
This module wraps the libmcrypt encryption library for easy and convenient use from within perl. Encryption and decryption using a variety of algorithms is as easy as a few simple lines of perl.
Exported constants
The predefined groups of exports in the use statements are as follows:
use Mcrypt qw(:ALGORITHMS);
Exports the BLOWFISH DES 3DES GOST CAST_128 XTEA RC2 TWOFISH CAST_256 SAFERPLUS LOKI97 SERPENT RIJNDAEL_128 RIJNDAEL_192 RIJNDAEL_256 ENIGMA ARCFOUR WAKE libmcrypt algorithms. See the mcrypt(3) man page for more details.
use Mcrypt qw(:MODES);
Exports the CBC ECB CFB OFB bOFB STREAM modes of encryption. See the mcrypt(3) man page for more details.
use Mcrypt qw(:FUNCS);
Exports the following functions: mcrypt_load, mcrypt_unload, mcrypt_init, mcrypt_end, mcrypt_encrypt, mcrypt_decrypt, mcrypt_get_block_size, mcrypt_get_iv_size, mcrypt_get_key_size.
EXAMPLES
# Procedural approach:
# create an ecryption descriptor:
# ALGORITHM: blowfish (256 bit key + 16 byte IV)
# MODE: cfb
# The user application has set:
# $method to either "encrypt" or "decrypt"
# $infile to the input filename
# $outfile to the output filename
my($td) = Mcrypt::mcrypt_load( Mcrypt::BLOWFISH, '',
Mcrypt::CFB, '' );
my($key) = "32 bytes of your apps secret key"; # secret key
my($iv) = "16 bytes of rand"; # shared initialization vector
Mcrypt::mcrypt_init($td, $key, $iv) || die "Could not initialize td";
print Mcrypt::mcrypt_encrypt($td, $_) while(<>);
Mcrypt::mcrypt_end($td);
# OO approach of the above except decrypting
my($td) = Mcrypt->new( algorithm => Mcrypt::BLOWFISH,
mode => Mcrypt::CFB,
verbose => 0 );
my($key) = "k" x $td->{KEY_SIZE};
my($iv) = "i" x $td->{IV_SIZE};
$td->init($key, $iv);
print $td->decrypt($_) while (<>);
$td->end();
AUTHOR
Theo Schlossnagle <jesus@omniti.com>
SEE ALSO
The libmcrypt man page: mcrypt(3). Other libmcrypt information is available at http://mcrypt.hellug.gr/.