Crypt::Mode::CBC(3)
Crypt::Mode::CBC(3) πβ¨
okay bestie, this page comes straight from the User Contributed Perl Documentation corner of the perl-verse, and it's here to explain Crypt::Mode::CBC β the CBC cipher mode. it's giving block-cipher-chaining realness π
π NAME π
Crypt::Mode::CBC - Block cipher mode CBC [Cipher-block chaining]
πΈ SYNOPSIS πΈ
use Crypt::Mode::CBC;
my $m = Crypt::Mode::CBC->new('AES');
my $key = '1234567890123456';
my $iv = '1234567890123456';
my $plaintext = 'example plaintext';
my $chunk1 = 'example ';
my $chunk2 = 'plaintext';
# encrypt or decrypt in one call
my $single_ciphertext = $m->encrypt($plaintext, $key, $iv);
my $single_plaintext = $m->decrypt($single_ciphertext, $key, $iv);
# encrypt more chunks
$m->start_encrypt($key, $iv);
my $chunked_ciphertext = '';
$chunked_ciphertext .= $m->add($chunk1);
$chunked_ciphertext .= $m->add($chunk2);
$chunked_ciphertext .= $m->finish;
# decrypt more chunks
$m->start_decrypt($key, $iv);
my $chunked_plaintext = '';
$chunked_plaintext .= $m->add($chunked_ciphertext);
$chunked_plaintext .= $m->finish;
π¦ DESCRIPTION π¦
okay so this module implements CBC cipher mode. Note: it works only with ciphers from CryptX (Crypt::Cipher::NNNN). that's the whole vibe check, bestie π«Ά
π METHODS π
unless noted otherwise, assume $m is an existing mode object created via new, for example:
my $m = Crypt::Mode::CBC->new('AES');
β¨ new β¨
this is your constructor moment, the main character entrance:
my $m = Crypt::Mode::CBC->new($name);
#or
my $m = Crypt::Mode::CBC->new($name, $padding);
#or
my $m = Crypt::Mode::CBC->new($name, $padding, $cipher_rounds);
here's what those little arguments are serving:
$nameβ [string] one of'AES','Anubis','Blowfish','CAST5','Camellia','DES','DES_EDE','KASUMI','Khazad','MULTI2','Noekeon','RC2','RC5','RC6','SAFERP','SAFER_K128','SAFER_K64','SAFER_SK128','SAFER_SK64','SEED','Skipjack','Twofish','XTEA','IDEA','Serpent', or any<NAME>for which there is aCrypt::Cipher::<NAME>module.$paddingβ [integer] pick your padding era:0β no padding (plaintext size has to be multiple of block length).1β PKCS5 padding, Crypt::CBC's "standard" β DEFAULT.2β Crypt::CBC's "oneandzeroes".3β ANSI X.923 padding.4β zero padding.5β zero padding (+a block of zeros if the output length is divisible by the blocksize).
$cipher_roundsβ [integer] optional, number of rounds for given cipher.
π encrypt π
Encrypts the plaintext in a single call. Returns the ciphertext as a binary string. The plaintext scalar is converted to bytes using Perl's usual scalar stringification. Defined scalars, including numbers and string-overloaded objects, are accepted. undef is treated as an empty string and may emit Perl's usual "uninitialized value" warning.
my $ciphertext = $m->encrypt($plaintext, $key, $iv);
π decrypt π
Decrypts the ciphertext in a single call. Returns the plaintext as a binary string. The ciphertext scalar is converted to bytes using Perl's usual scalar stringification. Defined scalars, including numbers and string-overloaded objects, are accepted. undef is treated as an empty string and may emit Perl's usual "uninitialized value" warning.
my $plaintext = $m->decrypt($ciphertext, $key, $iv);
π start_encrypt π
Initializes encryption mode. Returns the object itself.
$m->start_encrypt($key, $iv);
π§ start_decrypt π§
Initializes decryption mode. Returns the object itself.
$m->start_decrypt($key, $iv);
π add π
Feeds data to the encryption or decryption stream. Returns a binary string.
Each argument is converted to bytes using Perl's usual scalar stringification. Defined scalars, including numbers and string-overloaded objects, are accepted. undef is treated as an empty string and may emit Perl's usual "uninitialized value" warning.
# in encrypt mode
my $ciphertext = $m->add($plaintext);
# in decrypt mode
my $plaintext = $m->add($ciphertext);
π finish π
Finalizes the stream. In encryption mode, pads and encrypts the final block; in decryption mode, decrypts and removes padding from the final block. Returns the result as a binary string (may be empty if there is no data to flush).
# encrypt more chunks
$m->start_encrypt($key, $iv);
my $chunk1 = 'example ';
my $chunk2 = 'plaintext';
my $ciphertext = '';
$ciphertext .= $m->add($chunk1);
$ciphertext .= $m->add($chunk2);
$ciphertext .= $m->finish;
# decrypt more chunks
$m->start_decrypt($key, $iv);
my $plaintext = '';
$plaintext .= $m->add($ciphertext);
$plaintext .= $m->finish;
π SEE ALSO π
CryptX,Crypt::CipherCrypt::Cipher::AES,Crypt::Cipher::Blowfish, ...<https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28CBC.29>
xoxo bestie, that's the whole page π it came from perl v5.42.0, dated 2026-05-11. slay responsibly π β¨
π¦ where this page comes from
- opensuse-leap 16.0: perl-CryptX 0.89.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- opensuse-leap 16.0: perl-CryptX 0.89.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- opensuse-leap 16.0: perl-CryptX 0.89.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- opensuse-leap 16.0: perl-CryptX 0.89.0-bp160.1.1 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms