<?php
/************************************************************************
+----------------------------------------------------------------------+
| affine.php -> Affine Cipher |
+----------------------------------------------------------------------+ |
| |
| (c) 2002 by M.Abdullah Khaidar (khaidarmak@yahoo.com) |
| |
| This program is free software. You can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2 of the License. |
| |
+----------------------------------------------------------------------+
************************************************************************/
include "main.php";
$TITLE="Affine Encoder and Decoder";
$HEADTITLE="Affine Encoder and Decoder";
/*
Affine Cipher:
e(x) = ax + b mod 26
and
d(y) = a^(-1) * (y - b) mod 26
*/
function affine_encode($plain,$a,$b){
$cipher="";
$plain=filter($plain);
$plain=check_length($plain);
for($i=0;$i<strlen($plain);$i++){
$p=substr($plain,$i,1);
$p=decimal($p);
$c=(($a*$p)+$b)%26;
$c=ascii_letter($c);
$cipher=$cipher.$c;
}
return $cipher;
}
function inv_mul($input){
switch($input){
case 1: $output=1;break;
case 3: $output=9;break;
case 5: $output=21;break;
case 7: $output=15;break;
case 9: $output=3;break;
case 11: $output=19;break;
case 15: $output=7;break;
case 17: $output=23;break;
case 19: $output=11;break;
case 21: $output=5;break;
case 23: $output=17;break;
case 25: $output=25;break;
default: $output=0;break;
}
return $output;
}
function affine_decode($plain,$a,$b){
$cipher="";
$plain=filter($plain);
$plain=check_length($plain);
for($i=0;$i<strlen($plain);$i++){
$p=substr($plain,$i,1);
$p=decimal($p);
$c=(inv_mul($a)*($p-$b))%26;
if($c<0) $c=$c+26;
$c=ascii_letter($c);
$cipher=$cipher.$c;
}
return $cipher;
}
top();
echo "<form name=\"Form\" action=\"affine.php\" method=\"post\">\n";
echo "Enter text you want to encode or decode:<br>\n";
echo "<textarea name=\"plain\" cols=40 rows=7 class=\"txtcolor\">\n";
if ($plain){
$plain=filter($plain);
$plain=check_length($plain);
echo $plain;
}
echo "</textarea><br><br>\n";
echo "a :";
echo "<select name=\"keya\" width=200 class=\"txtcolor\">\n";
echo "<option value=1>1</option>\n";
echo "<option value=3>3</option>\n";
echo "<option value=5>5</option>\n";
echo "<option value=7>7</option>\n";
echo "<option value=9>9</option>\n";
echo "<option value=11>11</option>\n";
echo "<option value=15>15</option>\n";
echo "<option value=17>17</option>\n";
echo "<option value=19>19</option>\n";
echo "<option value=21>21</option>\n";
echo "<option value=23>23</option>\n";
echo "<option value=25>25</option>\n";
if($keya) echo "<option value=$keya selected>$keya</option>\n";
echo "</select>\n";
echo " ";
echo "b:";
echo "<select name=\"keyb\" width=200 class=\"txtcolor\">\n";
for($i=0;$i<=25;$i++){
if ($i==$keyb){
echo "<option value=$i selected>$i</option>\n";
}else{
echo "<option value=$i>$i</option>\n";
}
}
echo "</select>\n";
echo "<br><br>";
echo "<input type=\"submit\" name=\"process\" value=\"Encode\" class=\"txtcolor\">\n";
echo "<input type=\"submit\" name=\"process\" value=\"Decode\" class=\"txtcolor\">\n";
echo "</form>\n";
if ($process=="Encode"){
$cipher=affine_encode($plain,$keya,$keyb);
echo "Text after encoding:<br>\n";
echo "<textarea cols=40 rows=7 class=\"txtcolor\">$cipher</textarea><br><br>\n";
}elseif($process=="Decode"){
$cipher=affine_decode($plain,$keya,$keyb);
echo "Text after decoding:<br>\n";
echo "<textarea cols=40 rows=7 class=\"txtcolor\">$cipher</textarea><br><br>\n";
}
bottom();
?>