Crypt-Trifid
view release on metacpan or search on metacpan
lib/Crypt/Trifid.pm view on Meta::CPAN
4142434445464748495051525354555657585960616263Source: 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
888990919293949596979899100101102103104105106107108109110111112113114115116117118119
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
123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
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.226 second using v1.01-cache-2.11-cpan-454fe037f31 )