Защита информации в ПЭВМ. Шифр Плейфера — страница 8

  • Просмотров 6413
  • Скачиваний 424
  • Размер файла 31
    Кб

значение расшифрованной строки, величины строка. Обозначения 1. Описание массивов Alfavit, INDEX. 2 .. 5 Организация по парного перебора символов строки открытого текста. 6 .. 7 Пара символов находится в одной строке матрицы алфавита Плэйфкра. 8 .. 9 Пара символов находится в одном столбце матрицы алфавита Плэйфера. 10. Пара символов находится в разных строках и столбцах матрицы алфавита Плэйфера. 11 .. 15 Из расшифрованной строки <New>

создается новая строка <Str> без спец. знак “-”. 16. Присваивание ПФ DESHIFR_TXT значения новой строки <Str> Продолжение следует¼ Алгоритм Начало ПФ DESHIFR_TXT (Str, Alfavit, INDEX) Описание массивов: Alfavit[255], INDEX[6, 6] New = “, Dlina_str = Length(Str)div 2, I = 1 нет I <= Dlina_str SIM1 = Str[2*I - 1], SIM2 = Str[2*I] I = I + 1 нет ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK New = New + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (((ALFAVIT[Ord(SIM1)].STOLB + 4)mod 6) + 1)] + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (((ALFAVIT[Ord(SIM2)].STOLB + 4)mod 6) + 1)] нет ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB New = New +

INDEX[(((ALFAVIT[Ord(SIM1)].STROK + 4)mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)] + INDEX[(((ALFAVIT[Ord(SIM2)].STROK + 4)mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)] New = New + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)] + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)] Str = “, Dlina_new = Length(New), I = 1 нет I <= Dlina_new нет New[I] ¹ ‘-’ Str = Str + New[I] I = I + 1 DESHIFR_TXT = Str Конец ПФ DESHIFR_TXT ОСНОВНАЯ ПРОГРАММА Алгоритм Начало основного блока программы Описание массивов: Alfavit[255], INDEX[6, 6] Вывод: “Выберите (S)ШИФРОВАТЬ или (D)ДЕШИФРОВАТЬ” нет Ввод: K нет UpCase(K) = ‘S’ UpCase(K)

= ‘D’ Вывод: “Путь к файлу: ” Ввод: Name1 Assign (Var_file1, Name1) Reset (Var_file1) нет IOResult = 0 Вывод: “Сохранить как: ” Ввод: Name2 нет Length(Name2) ¹ 0 Assign (Var_file2, Name2) ReWrite (Var_file2) SHIFR_PLEYFER(ALFAVIT, INDEX) нет NOT EOF(Var_file1) Ввод из файла Var_file1: Str нет да UpCase(K) = ‘S’ Str = DESHIFR_TXT(Str, ALFAVIT, INDEX) Str = SHIFR_TXT(Str, ALFAVIT, INDEX) Вывод в файл Var_file2: Str Close (Var_file1) Close (Var_file2) Конец основного блока программы Обозначения 1. Описание массивов Alfavit, INDEX. 2 .. 5 Выбор шифрование или расшифрация файла. 6 .. 9

Определение файла ввода данных. 10 .. 13 Определение файла вывода полученных результатов. 14. Обращение к ПП SHIFR_PLEYFER(ALFAVIT, INDEX). 15 .. 16 Перебор строк из файла Var_file1. 17. Выбор действий шифрование либо расшифрация строки <Str>. 18. Обращение к ПФ DESHIFR_TXT(Str, ALFAVIT, INDEX). 19. Обращение к ПФ SHIFR_TXT(Str, ALFAVIT, INDEX). 20. Вывод результата в файл Var_file2. 21. Закрытие файлов ввода и вывода. Программа PROGRAM SHIFR_PLEYFERA; USES Crt; TYPE path = STRING[14]; Stroca = STRING[255]; Simvol = array [1..6, 1..6] of CHAR; MATR =

array [1..255] of RECORD STROK, STOLB: Byte; END; CONST INDEX: Simvol = (('А', 'Ж', 'Б', 'М', 'Ц', 'В'), {типизированные константы для матрицы Плэйфера} ('Ч', 'Г', 'Н', 'Ш', 'Д', 'О'), ('Е', 'Щ', ' , ', 'Х', 'У', 'П'), (' . ', 'З', 'Ъ', 'Р', 'И', 'Й'), ('С', 'Ь', 'К', 'Э', 'Т', 'Л'), ('Ю', 'Я', ' ', 'Ы', 'Ф', '-')); VAR Var_file1 ,Var_file2: Text; Name1, Name2: path; ALFAVIT: MATR; Str: Stroca; K: Char; {Определение координат символов матрицы Плэйфера} PROCEDURE SHIFR_PLEYFER(Var ALFAVIT: MATR; INDEX: Simvol); VAR I, J: Byte; {I, J - счетчики циклов} BEGIN {Начало основного блока ПП SHIFR_PLEYFER} FOR I:= 1 TO 6 DO for J:= 1 to 6