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

use strict;
use warnings;
use MIME::Base64;
use Crypt::CBC;
use Digest::SHA;

my $str    = 'o=1&v=3&p=5';
my $cipher = Crypt::CBC->new(
    {
        'key'         => 'length16length16',
        'cipher'      => 'Rijndael',
        'iv'          => '1234567890abcdef',
        'literal_key' => 1,
        'padding'     => 'null',
        'header'      => 'none',
        keysize       => 128 / 8
    }
);
my $encrypted = $cipher->encrypt($str);
print "encrypted: " . encode_base64($encrypted) . "\n";
print "decrypted: " . $cipher->decrypt($encrypted) . "\n";

my $hmac = Digest::SHA::hmac_sha1( $encrypted, 'hmackey' );
print "hmac: " . encode_base64($hmac) . "\n";
print "total: " . encode_base64( $encrypted . $hmac ) . "\n";

1;