Guest User

Untitled

a guest
Apr 26th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.83 KB | None | 0 0
  1. <?php
  2. //
  3. // Реализация алгоритма шифра Виженера
  4. // by Edgeline [Jabber: edgeline(at)kgn.ru]
  5. //
  6.  
  7. // Функция шифрования сообщения
  8. function encode_msg ($text, $rawkey)
  9. {
  10.     $textlen = strlen ($text);
  11.     $key = key_stretch ($rawkey, $textlen);
  12.    
  13.     // Шифруем по ф-ле C = (P + K) mod 26
  14.     for ($i=0; $i<=$textlen-1; $i++)
  15.     {
  16.         $p=get_code($text[$i]);
  17.         $k=get_code($key[$i]);
  18.         $c = ($p + $k) % 26;
  19.         $msg .= get_char($c);
  20.     }
  21.    
  22.     return $msg;
  23. }
  24.  
  25. // Обратная функция
  26. function decode_msg ($text, $key)
  27. {
  28.     $textlen = strlen ($text);
  29.    
  30.     // Дешифруем по ф-ле P = (C – K) mod 26
  31.     for ($i=0; $i<=$textlen-1; $i++)
  32.     {
  33.         $c=get_code($text[$i]);
  34.         $k=get_code($key[$i]);
  35.         $g = ($c - $k);
  36.        
  37.         if ($g < 0)
  38.         {
  39.             $p = $g + 26;
  40.         }
  41.         else
  42.         {
  43.             $p = $g % 26;
  44.         }
  45.        
  46.         $msg .= get_char($p);
  47.     }
  48.    
  49.     return $msg;
  50. }
  51.  
  52. // Функция для "растяжения" ключа до длины сообщения
  53. function key_stretch ($key, $textlen)
  54. {
  55.     $keylen = strlen ($key);
  56.     $part = $textlen % $keylen;
  57.    
  58.     for ($i=1; $i<=(($textlen-$part)/$keylen); $i++) $map .= $key;
  59.         $map .= substr ($key, 0, $part);
  60.    
  61.     return $map;
  62. }
  63.  
  64. // Вернуть символ по его коду (0-25)
  65. function get_char ($value)
  66. {
  67.     return chr($value + 65);
  68. }
  69.  
  70. // Вернуть код по символу
  71. function get_code ($value)
  72. {
  73.     return (ord($value) - 65);
  74. }
  75.  
  76. echo "— Encoding: \n";
  77. echo encode_msg ("ATTACKATDAWN", "LEMON");
  78. echo "\n\n";
  79.  
  80. echo "— Decoding: \n";
  81. echo decode_msg ("LXFOPVEFRNHR", "LEMONLEMONLE");
  82. echo "\n\n";
  83.  
  84. ?>
Add Comment
Please, Sign In to add comment