Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2017, 21:36   #1
diman97_09
 
Регистрация: 16.02.2017
Сообщений: 7
Восклицание Маршрутное шифрование.PascalABC.

Этот способ шифрования изобрел выдающийся французский математик и криптограф Франсуа Виет (1540-1603). Пусть m и n – некоторые натуральные числа, каждое больше 1. Открытый текст последовательно разбивается на части (блоки) с длиной, равной произведению mn (если в последнем блоке не хватает букв, можно дописать до нужной длины произвольный их набор). Блок вписывается построчно в таблицу размерности mхn (т.е. m строк и n столбцов). Криптограмма получается выписыванием букв из таблицы в соответствии с некоторым маршрутом. Этот маршрут вместе с числами m и n составляет ключ шифра. Чаще всего буквы выписывают по столбцам, которые упорядочиваются в соответствии с паролем: под таблицей подписывается слово, состоящее из n неповторяющихся букв, и столбцы таблицы нумеруются по алфавитному порядку букв пароля. Например, для шифрования открытого текста, выражающего один из главных принципов криптологии: нельзя недооценивать противника, добавим к его 29 буквам еще одну, скажем а, возьмем m=5, n=6, впишем текст в таблицу mxn;6 и выберем в качестве пароля слово п а р о л ь:
н е л ь з я
н е д о о ц
е н и в а т
ь п р о т и
в н и к а а
п а р о л ь
Выписывая теперь буквы по столбцам в соответствии с алфавитным порядком букв в пароле, получаем следующую криптограмму: ЕЕНПНЗОАТАЬОВОКННЕЬВЛДИРИЯЦТИА (пробелы пропускаются).
Составить программу, которая по заданным m, n и паролю выполнит шифрование/дешифрование методом Виета.


Помогите пожалуйста, надо срочно сдать а я не шарю совсем...
Надо чтоб программа работала с файлами(Взяла фразу из файла, записала в массив, а потом вывела конечный результат шифровки в другой файл, с дешифрованием так же). Если можно,шифрование и дешифрование в 2 кода записать. Буду безмерно благодарен.
diman97_09 вне форума Ответить с цитированием
Старый 20.03.2017, 21:54   #2
Hitoku
Пользователь
 
Аватар для Hitoku
 
Регистрация: 05.03.2017
Сообщений: 18
По умолчанию

Код:
var
P:array [1..100,1..100] of string;
n,m,c:integer;
phrase,pass,pass_cr:string;
f:text;
begin
  writeln('Введите m и n:');
  readln(m,n);
  repeat
    writeln('Введите фразу из ',n*m,' символов (без пробелов):');
    readln(phrase);
  until length(phrase)=n*m;
  repeat
    writeln('Введите пароль из ',n,' символов:');
    readln(pass);
  until length(pass)=n;
 
  for var j:=1 to n do
    P[m+1,j]:=pass[j];
 
  pass_cr:=pass;
  for var i := 1 to length(pass_cr)-1 do begin
    for var j := i + 1 to length(pass_cr) do
      if pass_cr[j]<pass_cr[i] then begin
        var ch := pass_cr[i];
        pass_cr[i]:=pass_cr[j];
        pass_cr[j]:= ch;
      end;
  end;
        for var j:=1 to n do
          P[m+2,j]:=pass_cr[j];
 
  writeln('Выберите операцию:');
  writeln('1.Шифрование');
  writeln('2.Дешифрование');
  readln(c);
  case c of
  1: begin
         var l:=1;
         for var i:=1 to m do
           for var j:=1 to n do begin
            P[i,j]:=phrase[l];
            l+=1;
           end;
        
       writeln('Готово:');
       var s:=0;
       var j:=1;
       l:=1;
       repeat
         if P[m+1,j]=pass_cr[l] then begin
           for var i:=1 to m do
             write(P[i,j]);
           s+=1; j:=1; l+=1;
         end
           else j+=1;
       until s=n;
     end;
     
  2:begin
         var l:=1;
         for var j:=1 to n do
           for var i:=1 to m do begin
            P[i,j]:=phrase[l];
            l+=1;
           end;
     
       writeln('Готово:');
       for var i:=1 to m do begin
       var s:=0;
       var j:=1;
       l:=1;
       repeat
         if P[m+2,j]=pass[l] then begin
             write(P[i,j]);
           s+=1; j:=1; l+=1;
         end
           else j+=1;
       until s=n;
       end;
     end;
  end;
end.
Здесь должна быть подпись... Но чего-то лень придумывать(
Hitoku вне форума Ответить с цитированием
Старый 20.03.2017, 21:59   #3
Hitoku
Пользователь
 
Аватар для Hitoku
 
Регистрация: 05.03.2017
Сообщений: 18
По умолчанию

Без файлов (из личных запасов). Либо как-нибудь самостоятельно, либо надейтесь и ждите)
Здесь должна быть подпись... Но чего-то лень придумывать(
Hitoku вне форума Ответить с цитированием
Старый 20.03.2017, 22:18   #4
diman97_09
 
Регистрация: 16.02.2017
Сообщений: 7
По умолчанию

Жаль,что без файлов( Но и за это спасибо большое.
к сожалению, я вообще не шарю, врядли смогу файлы сделать

Последний раз редактировалось diman97_09; 20.03.2017 в 22:25.
diman97_09 вне форума Ответить с цитированием
Старый 20.03.2017, 22:52   #5
Hitoku
Пользователь
 
Аватар для Hitoku
 
Регистрация: 05.03.2017
Сообщений: 18
По умолчанию

Вся информация об этом есть в интернете. Введите "работа с файлами паскаль" и будет вам радость
Здесь должна быть подпись... Но чего-то лень придумывать(
Hitoku вне форума Ответить с цитированием
Старый 20.03.2017, 23:54   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

а ещё есть волшебный раздел Фриланс...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование PascalABC.net Pistoletka Помощь студентам 0 22.11.2016 17:48
PascalABC stalker161reg Помощь студентам 0 25.12.2013 15:18
PascalABC Юся=) Помощь студентам 1 22.12.2011 19:09
PascalABC ludan Помощь студентам 0 22.10.2011 22:50
PascalABC, uses Gorny Помощь студентам 3 04.12.2009 13:12