Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- //
- // Реализация алгоритма шифра Виженера
- // by Edgeline [Jabber: edgeline(at)kgn.ru]
- //
- // Функция шифрования сообщения
- function encode_msg ($text, $rawkey)
- {
- $textlen = strlen ($text);
- $key = key_stretch ($rawkey, $textlen);
- // Шифруем по ф-ле C = (P + K) mod 26
- for ($i=0; $i<=$textlen-1; $i++)
- {
- $p=get_code($text[$i]);
- $k=get_code($key[$i]);
- $c = ($p + $k) % 26;
- $msg .= get_char($c);
- }
- return $msg;
- }
- // Обратная функция
- function decode_msg ($text, $key)
- {
- $textlen = strlen ($text);
- // Дешифруем по ф-ле P = (C – K) mod 26
- for ($i=0; $i<=$textlen-1; $i++)
- {
- $c=get_code($text[$i]);
- $k=get_code($key[$i]);
- $g = ($c - $k);
- if ($g < 0)
- {
- $p = $g + 26;
- }
- else
- {
- $p = $g % 26;
- }
- $msg .= get_char($p);
- }
- return $msg;
- }
- // Функция для "растяжения" ключа до длины сообщения
- function key_stretch ($key, $textlen)
- {
- $keylen = strlen ($key);
- $part = $textlen % $keylen;
- for ($i=1; $i<=(($textlen-$part)/$keylen); $i++) $map .= $key;
- $map .= substr ($key, 0, $part);
- return $map;
- }
- // Вернуть символ по его коду (0-25)
- function get_char ($value)
- {
- return chr($value + 65);
- }
- // Вернуть код по символу
- function get_code ($value)
- {
- return (ord($value) - 65);
- }
- echo "— Encoding: \n";
- echo encode_msg ("ATTACKATDAWN", "LEMON");
- echo "\n\n";
- echo "— Decoding: \n";
- echo decode_msg ("LXFOPVEFRNHR", "LEMONLEMONLE");
- echo "\n\n";
- ?>
Add Comment
Please, Sign In to add comment