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 )