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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2016, 14:34   #1
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию Шифр Трисемуса

Здравствуйте, требуется написать программу для шифровки слова/фразы шифром Трисемуса.
Для получения такого шифра замены обычно использовались таблица для записи букв алфавита и ключевое слово. В таблицу сначала вписывалось по строкам ключевое слово, причем повторяющиеся буквы отбрасывались. Затем эта таблица дополнялась не вошедшими в нее буквами алфавита по порядку, исключая буквы из ключевого слова.
При шифровании находят в этой таблице очередную букву открытого текста и записывают в шифрованный текст букву, расположенную ниже ее, в том же столбце. Если буква текста оказывается в нижней строке таблицы, тогда для шифрованного текста берут самую верхнюю букву из того же столбца.

В интернете нашел такую вот штучку:
Код:
uses crt;
    const alphabet:array[1..4,1..8] of char =
        (('Б', 'А', 'Н', 'Д', 'Е', 'Р', 'О', 'Л'),
         ('Ь', 'В', 'Г' ,'Ж', '3', 'И', 'Й', 'К'),
         ('М', 'П', 'С', 'Т', 'У', 'Ф', 'X', 'Ц'),
         ('Ч', 'Ш', 'Щ', 'Ы', 'Ъ', 'Э', 'Ю', 'Я'));
         
Function encode(c:char):char;
    var i,j:integer;
Begin
    for i:=1 to 4 do
        for j:=1 to 8 do
            if (c = alphabet[i][j]) then
            Begin
                if (i <> 4) then encode:=alphabet[i+1][j]
                else encode:=alphabet[1][j];
            End;
End;
Function decode(c:char):char;
    var i,j:integer;
Begin
    for i:=1 to 4 do
        for j:=1 to 8 do
            if (c = alphabet[i][j]) then
            Begin
                if (i <> 1) then decode:=alphabet[i-1][j]
                else decode:=alphabet[4][j];
            End;
End;
     var s:string;
         i:integer;
begin
writeln('Введите сообщение');
 readln(s);

 
  for i:=1 to length (s) do
    s[i]:=encode(s[i]);
  WriteLn(s);
 
  for i:=1 to length (s) do
    s[i]:=decode(s[i]);
  Readln;
end.
Но в ней слово-ключ задано по умолчанию в коде. Мне же нужно чтобы ключ вписывал я после запуска программы. Нужна помощь, господа.
Kef1r вне форума Ответить с цитированием
Старый 21.10.2016, 14:46   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Так проблема в чем? Найди в инете как вводить строку или массив символов, можете еще про циклы почитать...
p51x вне форума Ответить с цитированием
Старый 21.10.2016, 15:36   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Так понимаю, что проблема в составлении таблицы.
Могу предложить такой вариант:
Есть строка с алфавитом и есть строка с ключевым словом.
В цикле, до последнего символа ключевого слова:
- берем первый символ ключа и ищем в строке с алфавитом. Если такой символ там есть, то а) пишем символ в таблицу и б) в строке с алфавитом символ замещаем каким либо другим, например, восклицательным знаком или вообще не отображаемым символом (пример - #186).
- берем следующий символ ключа и поступаем так же.
После того, как просмотрели все символы ключа, копируем оставшиеся символы из строки с алфавитом в таблицу (проверяя, что символ - буква).


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 21.10.2016, 15:46   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ViktorR, точно так.

Kef1r, алгоритм есть, теперь справитесь?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.10.2016, 16:19   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Если уж такой код написал сам, то ...

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 21.10.2016, 16:52   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Если уж такой код написал сам, то ...
Это Вы автору темы льстите.
Именно этот код этот только на нашем форуме не один раз публиковался.
и ключевое слово именно "БАНДЕРОЛЬ".

Но то, что он не сам написал, это, как раз, не страшно.
Главное, чтобы понимал, что нужно ввести в программу и умел писать код на Паскале.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.10.2016, 19:05   #7
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Алгоритм то я может и понимаю, а с кодом на паскале проблемы.
Kef1r вне форума Ответить с цитированием
Старый 21.10.2016, 20:45   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Kef1r Посмотреть сообщение
Алгоритм то я может и понимаю, а с кодом на паскале проблемы.
т.е. Вы даже пытаться написать код на Паскале не собираетесь?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.10.2016, 21:56   #9
Kef1r
Форумчанин
 
Регистрация: 13.05.2016
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
т.е. Вы даже пытаться написать код на Паскале не собираетесь?
Собираюсь, сегодня нет возможности, завтра буду пробовать
Kef1r вне форума Ответить с цитированием
Старый 21.10.2016, 22:36   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Kef1r Посмотреть сообщение
Собираюсь, сегодня нет возможности, завтра буду пробовать
Хорошо. Попробуйте.
Если всё получится - отлично.
если нет - выложите свой код, расскажите, что не получается, Вам обязательно помогут и подскажут.

А вообще, конечно, код там несложный, новичку вполне по силам.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифр Dyatz Безопасность, Шифрование 10 15.10.2013 20:09
шифрование таблицами трисемуса chaknoris Помощь студентам 0 13.04.2012 10:28
Шифр Трисемуса marta1990 Помощь студентам 3 16.11.2011 13:25
Шифрующие таблицы Трисемуса 1keks Помощь студентам 13 22.11.2010 00:47
Шифрующие таблицы Трисемуса megayakor Помощь студентам 4 11.06.2008 13:16