Affine Cipher PHP


SUBMITTED BY: Guest

DATE: July 23, 2014, 12:29 p.m.

FORMAT: Text only

SIZE: 4.6 kB

HITS: 1046

  1. <?php
  2. /************************************************************************
  3. +----------------------------------------------------------------------+
  4. | affine.php -> Affine Cipher |
  5. +----------------------------------------------------------------------+ |
  6. | |
  7. | (c) 2002 by M.Abdullah Khaidar (khaidarmak@yahoo.com) |
  8. | |
  9. | This program is free software. You can redistribute it and/or modify |
  10. | it under the terms of the GNU General Public License as published by |
  11. | the Free Software Foundation; either version 2 of the License. |
  12. | |
  13. +----------------------------------------------------------------------+
  14. ************************************************************************/
  15. include "main.php";
  16. $TITLE="Affine Encoder and Decoder";
  17. $HEADTITLE="Affine Encoder and Decoder";
  18. /*
  19. Affine Cipher:
  20. e(x) = ax + b mod 26
  21. and
  22. d(y) = a^(-1) * (y - b) mod 26
  23. */
  24. function affine_encode($plain,$a,$b){
  25. $cipher="";
  26. $plain=filter($plain);
  27. $plain=check_length($plain);
  28. for($i=0;$i<strlen($plain);$i++){
  29. $p=substr($plain,$i,1);
  30. $p=decimal($p);
  31. $c=(($a*$p)+$b)%26;
  32. $c=ascii_letter($c);
  33. $cipher=$cipher.$c;
  34. }
  35. return $cipher;
  36. }
  37. function inv_mul($input){
  38. switch($input){
  39. case 1: $output=1;break;
  40. case 3: $output=9;break;
  41. case 5: $output=21;break;
  42. case 7: $output=15;break;
  43. case 9: $output=3;break;
  44. case 11: $output=19;break;
  45. case 15: $output=7;break;
  46. case 17: $output=23;break;
  47. case 19: $output=11;break;
  48. case 21: $output=5;break;
  49. case 23: $output=17;break;
  50. case 25: $output=25;break;
  51. default: $output=0;break;
  52. }
  53. return $output;
  54. }
  55. function affine_decode($plain,$a,$b){
  56. $cipher="";
  57. $plain=filter($plain);
  58. $plain=check_length($plain);
  59. for($i=0;$i<strlen($plain);$i++){
  60. $p=substr($plain,$i,1);
  61. $p=decimal($p);
  62. $c=(inv_mul($a)*($p-$b))%26;
  63. if($c<0) $c=$c+26;
  64. $c=ascii_letter($c);
  65. $cipher=$cipher.$c;
  66. }
  67. return $cipher;
  68. }
  69. top();
  70. echo "<form name=\"Form\" action=\"affine.php\" method=\"post\">\n";
  71. echo "Enter text you want to encode or decode:<br>\n";
  72. echo "<textarea name=\"plain\" cols=40 rows=7 class=\"txtcolor\">\n";
  73. if ($plain){
  74. $plain=filter($plain);
  75. $plain=check_length($plain);
  76. echo $plain;
  77. }
  78. echo "</textarea><br><br>\n";
  79. echo "a :";
  80. echo "<select name=\"keya\" width=200 class=\"txtcolor\">\n";
  81. echo "<option value=1>1</option>\n";
  82. echo "<option value=3>3</option>\n";
  83. echo "<option value=5>5</option>\n";
  84. echo "<option value=7>7</option>\n";
  85. echo "<option value=9>9</option>\n";
  86. echo "<option value=11>11</option>\n";
  87. echo "<option value=15>15</option>\n";
  88. echo "<option value=17>17</option>\n";
  89. echo "<option value=19>19</option>\n";
  90. echo "<option value=21>21</option>\n";
  91. echo "<option value=23>23</option>\n";
  92. echo "<option value=25>25</option>\n";
  93. if($keya) echo "<option value=$keya selected>$keya</option>\n";
  94. echo "</select>\n";
  95. echo "&nbsp;&nbsp;&nbsp;";
  96. echo "b:";
  97. echo "<select name=\"keyb\" width=200 class=\"txtcolor\">\n";
  98. for($i=0;$i<=25;$i++){
  99. if ($i==$keyb){
  100. echo "<option value=$i selected>$i</option>\n";
  101. }else{
  102. echo "<option value=$i>$i</option>\n";
  103. }
  104. }
  105. echo "</select>\n";
  106. echo "<br><br>";
  107. echo "<input type=\"submit\" name=\"process\" value=\"Encode\" class=\"txtcolor\">\n";
  108. echo "<input type=\"submit\" name=\"process\" value=\"Decode\" class=\"txtcolor\">\n";
  109. echo "</form>\n";
  110. if ($process=="Encode"){
  111. $cipher=affine_encode($plain,$keya,$keyb);
  112. echo "Text after encoding:<br>\n";
  113. echo "<textarea cols=40 rows=7 class=\"txtcolor\">$cipher</textarea><br><br>\n";
  114. }elseif($process=="Decode"){
  115. $cipher=affine_decode($plain,$keya,$keyb);
  116. echo "Text after decoding:<br>\n";
  117. echo "<textarea cols=40 rows=7 class=\"txtcolor\">$cipher</textarea><br><br>\n";
  118. }
  119. bottom();
  120. ?>

comments powered by Disqus