NAME

Crypt::Affine - Interface to the Affine cipher.

VERSION

Version 0.02

DESCRIPTION

The affine cipher is a type of mono alphabetic substitution cipher, wherein each letter in an alphabet is mapped to its numeric equivalent and then encrypted using a simple mathematical function. It inherits the weaknesses of all substitution ciphers. In the affine cipher the letters of an alphabet of size m are first mapped to the integers in the range 0..m-1. It then uses modular arithmetic to transform the integer that each plaintext letter corresponds to into another integer that correspond to a ciphertext letter.The function for encryption of a single letter can be defined as below:

E(x) = (mx + r) % l

where 'l' is the size of the alphabet and 'm' & 'r' are the key of cipher. The value 'm' must be choosen such that 'm' and 'l' are coprime.

Similarly the function for decryption of a single letter can be defined as below:

D(x) = (m ^ -1) (x - r) % l

where (m ^ -1) is the modular multiplicative inverse of 'm' modulo 'l' and it satisfies the equation below:

m (m ^ -1) % l = 1

CONSTRUCTOR

The constructor expects the following parameters as described below in the table:

+----------+----------+----------------------------------------------------------------+
| Key      | Required | Description                                                    | 
+----------+----------+----------------------------------------------------------------+
|  m       |    Yes   | Any positive number.                                           |
|  r       |    Yes   | Any positive number.                                           |
|  reverse |    No    | 0 or 1, depending whether to use reverse set of alphabets.     | 
|          |          | Default is 0.                                                  | 
|  source  |    No    | Filename with complete path containing comma seperated list of |
|          |          | alphabets. By default it uses A-Z,a-z.                         | 
+----------+----------+----------------------------------------------------------------+

use strict; use warnings;
use Crypt::Affine;

my $affine = Crypt::Affine->new(m => 5, r => 8);

METHODS

encrypt()

Encrypts the given string of alphabets ignoring any non-alphabets.

use strict; use warnings;
use Crypt::Affine;

my ($affine, $original, $encrypted);
$affine = Crypt::Affine->new(m => 5, r => 8);
$original = 'affine cipher';
$encrypted = $affine->encrypt($original);

print "Original : [$original]\n";
print "Encrypted: [$encrypted]\n";

decrypt()

Decrypts the given string of alphabets ignoring any non-alphabets.

use strict; use warnings;
use Crypt::Affine;

my ($affine, $original, $encrypted, $decrypted);
$affine = Crypt::Affine->new(m => 5, r => 8);
$original = 'affine cipher';
$encrypted = $affine->encrypt('affine cipher');
$decrypted = $affine->decrypt($encrypted);

print "Original : [$original]\n";
print "Encrypted: [$encrypted]\n";
print "Decrypted: [$decrypted]\n";

AUTHOR

Mohammad S Anwar, <mohammad.anwar at yahoo.com>

BUGS

Please report any bugs / feature requests to bug-crypt-affine at rt.cpan.org or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Crypt-Affine. I will be notified & then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc Crypt::Affine

You can also look for information at:

LICENSE AND COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.

DISCLAIMER

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.