Crypt-Trifid
view release on metacpan or search on metacpan
lib/Crypt/Trifid.pm view on Meta::CPAN
Source: L<Wikipedia|http://en.wikipedia.org/wiki/Trifid_cipher>
=head1 SYNOPSIS
use strict; use warnings;
use Crypt::Trifid;
my $crypt = Crypt::Trifid->new;
my $message = 'TRIFID';
my $encoded = $crypt->encode($message);
my $decoded = $crypt->decode($encoded);
print "Encoded message: [$encoded]\n";
print "Decoded message: [$decoded]\n";
=head1 METHODS
=head2 encode($message)
It takes message as scalar string and returns the encoded message.
use strict; use warnings;
use Crypt::Trifid;
lib/Crypt/Trifid.pm view on Meta::CPAN
my $value = join '', @values[$start..$end];
$encoded .= $_chart->{$value};
$start = $end + 1;
}
return $encoded;
}
=head2 decode($encoded_message)
It takes an encoded message as scalar string and returns the decoded message.
use strict; use warnings;
use Crypt::Trifid;
my $crypt = Crypt::Trifid->new;
my $message = 'TRIFID';
my $encoded = $crypt->encode($message);
my $decoded = $crypt->decode($encoded);
print "Encoded message: [$encoded]\n";
print "Decoded message: [$decoded]\n";
=cut
sub decode {
my ($self, $message) = @_;
die "ERROR: Missing message.\n" unless defined $message;
die "ERROR: Invalid message.\n" if ref($message);
my $chart = $self->chart;
lib/Crypt/Trifid.pm view on Meta::CPAN
my $index = 0;
my $_chars = [];
my $i = 0;
my $j = scalar(@nodes)/3;
while ($index < scalar(@nodes)) {
push @{$_chars->[$i]}, @nodes[$index..($index+$j-1)];
$index += $j;
$i++;
}
my $decoded = '';
foreach (1..$j) {
my $x = $_chars->[0]->[$_-1];
my $y = $_chars->[1]->[$_-1];
my $z = $_chars->[2]->[$_-1];
$decoded .= $_chart->{sprintf("%d%d%d", $x, $y, $z)};
}
return $decoded;
}
#
#
# PRIVATE METHODS
sub _encode {
my ($message, $chart) = @_;
my @chars = split //,$message;
( run in 0.536 second using v1.01-cache-2.11-cpan-26ccb49234f )