Четверг, 03.09.2026, 12:08
Приветствую Вас Гость | RSS
Меню сайта
Категории раздела
Примеры шифрования [8]
Шифрование методом Льюиса, Шифрование методом Атбаш, Шифрование методом Цезаря, Квадрат Полибия, Шифр Вижинера, Шифр Гронсфельда, Шифрование с помощью решетки, Шифр Хилла (с длиной блока = 2),
Наш опрос
Как хорошо вы знаете Паскаль
Всего ответов: 332
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » Статьи » Шифрование текстов на паскале » Примеры шифрования

Шифрование методом Льюиса
const
  len = 26;
 
  {Это символы для выбора столбца таблицы}
  alpha_hor: string = 'abcdefghijklmnopqrstuvwxyz';
 
  {Здесь будут символы для выбора строки таблицы}
  alpha_ver: string = '';
 
var
  {Это собственно таблица кодирования}
  table: array[1 .. len, 1 .. len] of char;
 
{функция получает строку S и возвращает строку,
  полученную из исходной сдвигом на N позиций}
function shift(s: string; n: integer): string;
  begin
  s := copy(s, length(s) - pred(n), n) + s;
  delete(s, length(s) - pred(n), n); shift := s
  end;
 
var
  i, j, row, col: integer;
  s: string; ch: char;
 
  key: string;
  is_russian: boolean;
  f_in: file of char; f_out, f_key: text;
begin
  { Заполнение таблицы кодировки }
  for i := 1 to len do begin
  {получаем строку символов для текущей строки таблицы}
  s := shift(alpha_hor, pred(i));
  for j := 1 to len do
  table[i, j] := s[j];
  {
  не забываем первый символ заносить в "хранилище"
  для выбора строк по кодируемой букве
  }
  alpha_ver := alpha_ver + s[1]
  end;
 
  { связываем логические файлы программы с физическими файлами на диске }
 
  { файл с фразой для кодирования - открываем для чтения }
  assign(f_in, 'f_00in.txt');
  {$i-} reset(f_in); {$i+}
 
  { файл для сохранения результата - открываем для записи }
  assign(f_out, 'f_00out.txt');
  {$i-} rewrite(f_out); {$i+}
 
  {
  файл, содержащий ключевое слово - открываем для чтения,
  считываем слово в строковую переменную и закрываем файл
  }
  assign(f_key, 'f_00key.txt');
  {$i-} reset(f_key); {$i+}
  readln(f_key, key);
  close(f_key);
 
  { счетчик закодированных символов }
  i := 0;
  {до конца кодируемого файла делаем следующее:}
  while not eof(f_in) do begin
  { читаем очередной символ }
  read(f_in, ch);
  { находим по нему строку таблицы }
  row := pos(ch, alpha_ver);
  {
  эта переменная содержит значение успеха предыдущей операции
  (если True, то символ присутствует в таблице, иначе False)
  }
  is_russian := (row > 0);
  if is_russian then begin
  { Если символ присутствует в таблице, его надо кодировать }
 
  { увеличиваем счетчик закодированных символов }
  inc(i);
 
  {
  находим столбец по значению ключевого символа
  (операция mod используется, чтобы исключить выход
  за пределы ключа, т.к. длина ключа обычно меньше
  длины шифруемой последовательности)
  }
  col := pos(key[i mod (length(key))], alpha_hor);
  { и заменяем простой символ на зашифрованный (из таблицы) }
  ch := table[row, col];
  end;
  {
  если символ надо было шифровать, он уже зашифрован,
  если он не может быть зашифрован, он остался без изменений.
  Пишем его в выходной файл
  }
  write(f_out, ch)
  end;
 
  { И закрываем оба файла: исходный и зашифрованный }
  close(f_out);
  close(f_in)
end.

Категория: Примеры шифрования | Добавил: Student (29.07.2009)
Просмотров: 3520 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
  • Курсовая работа
  • www.des.h19.ru - портал для вас и Вашего ПК



    Rambler's Top100 WOlist.ru - каталог качественных сайтов Рунета