The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


Mcrypt - Perl extension for the Mcrypt cryptography library


  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);


  # 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


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.


  # 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(<>);

  # 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 (<>);


Theo Schlossnagle <>


The libmcrypt man page: mcrypt(3). Other libmcrypt information is available at