Perl base64 encode and decode with checks
Perl
use strict;
use warnings;
use MIME::Base64 qw(encode_base64 decode_base64);
sub to_base64 {
my ($bytes, %opt) = @_;
my $enc = encode_base64($bytes, $opt{wrap} ? "\n" : '');
return $enc;
}
sub from_base64 {
my ($text) = @_;
(my $clean = $text // '') =~ s/\s+//g;
die "invalid base64 length\n" if length($clean) % 4;
die "invalid base64 characters\n" unless $clean =~ m{\A[A-Za-z0-9+/]*={0,2}\z};
my $bytes = decode_base64($clean);
die "invalid base64 payload\n" unless encode_base64($bytes, '') eq $clean;
return $bytes;
}
my $enc = to_base64('hello bits');
print $enc, ' ', from_base64($enc), "\n";