Шифрование методом Льюиса, Шифрование методом Атбаш, Шифрование методом Цезаря, Квадрат Полибия, Шифр Вижинера, Шифр Гронсфельда, Шифрование с помощью решетки, Шифр Хилла (с длиной блока = 2),
{Это символы для выбора столбца таблицы} 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.