# NAME

Crypt::Affine - Interface to the Affine cipher.

Version 0.15

# DESCRIPTION

The affine cipher is a type of mono alphabetic substitution cipher, wherein each letter in an alphabet is mapped to its numeric equivalent & 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    |
|          |          | separated 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    = Crypt::Affine->new({ m => 5, r => 8 });
my \$original  = 'affine cipher';
my \$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    = Crypt::Affine->new({ m => 5, r => 8 });
my \$original  = 'affine cipher';
my \$encrypted = \$affine->encrypt('affine cipher');
my \$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>`

# REPOSITORY

https://github.com/manwar/Crypt-Affine

# 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:

This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0). You may obtain a copy of the full license at: