2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Шифратор и дешифратор по Виженеру - проблема
Сообщение03.02.2013, 14:33 


18/01/11
78
Здравствуйте!
Получил от учителя задание: написать на TurboPascal шифратор и дешифратор по шифру Виженера.
Помогите, пожалуйста, составить эти 2-е программы.
Я нашел 2 варианта шифратора, но они дают разные результаты, что меня настораживает:
1:
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program p1;
var
  a,kl,sh:string;
  th: array[1..255] of Char;
  ch,dh,ah:array[1..255] of integer;
  l,d,i,i2:integer;
BEGIN

  i2:=0;
  writeln('Input key:');
  readln(kl);
  writeln('Input word:');
  readln(sh);
  l:=Length(kl);

  for i:=1 to l do
    case kl<span style="font-style: italic"> of
      'a': ch[i]:=0;
      'b': ch[i]:=1;
      'c': ch[i]:=2;
      'd': ch[i]:=3;
      'e': ch[i]:=4;
      'f': ch[i]:=5;
      'g': ch[i]:=6;
      'h': ch[i]:=7;
      'i': ch[i]:=8;
      'j': ch[i]:=9;
      'k': ch[i]:=10;
      'l': ch[i]:=11;
      'm': ch[i]:=12;
      'n': ch[i]:=13;
      'o': ch[i]:=14;
      'p': ch[i]:=15;
      'q': ch[i]:=16;
      'r': ch[i]:=17;
      's': ch[i]:=18;
      't': ch[i]:=19;
      'u': ch[i]:=20;
      'v': ch[i]:=21;
      'w': ch[i]:=22;
      'x': ch[i]:=23;
      'y': ch[i]:=24;
      'z': ch[i]:=25;
    end;
  for i:=1 to Length(sh) do
    begin
      case sh[i] of
        'a': dh[i]:=0;
        'b': dh[i]:=1;
        'c': dh[i]:=2;
        'd': dh[i]:=3;
        'e': dh[i]:=4;
        'f': dh[i]:=5;
        'g': dh[i]:=6;
        'h': dh[i]:=7;
        'i': dh[i]:=8;
        'j': dh[i]:=9;
        'k': dh[i]:=10;
        'l': dh[i]:=11;
        'm': dh[i]:=12;
        'n': dh[i]:=13;
        'o': dh[i]:=14;
        'p': dh[i]:=15;
        'q': dh[i]:=16;
        'r': dh[i]:=17;
        's': dh[i]:=18;
        't': dh[i]:=19;
        'u': dh[i]:=20;
        'v': dh[i]:=21;
        'w': dh[i]:=22;
        'x': dh[i]:=23;
        'y': dh[i]:=24;
        'z': dh[i]:=25;
      end;
    end;
  for i:=1 to Length(sh) do
    begin
      if (i <= l) then
        ah[i] := ch[i] + dh[i]
      else
        if ((i mod l) <> 0) then
          ah[i] := ch[i mod l] + dh[i]
        else
          ah[i] := ch[Length(kl)] + dh[i];
      if (ah[i]>25) then
        ah[i]:=ah[i]-26;
    end;

  for i:=1 to Length(sh) do
    begin
      case ah[i] of
        0: th[i]:='a';
        1: th[i]:='b';
        2: th[i]:='c';
        3: th[i]:='d';
        4: th[i]:='e';
        5: th[i]:='f';
        6: th[i]:='g';
        7: th[i]:='h';
        8: th[i]:='i';
        9: th[i]:='j';
        10: th[i]:='k';
        11: th[i]:='l';
        12: th[i]:='m';
        13: th[i]:='n';
        14: th[i]:='o';
        15: th[i]:='p';
        16: th[i]:='q';
        17: th[i]:='r';
        18: th[i]:='s';
        19: th[i]:='t';
        20: th[i]:='u';
        21: th[i]:='v';
        22: th[i]:='w';
        23: th[i]:='x';
        24: th[i]:='y';
        25: th[i]:='z';
      end;
    end;
writeln('cipher text: ');
writeln(th);
readln;
end.


[i]2:
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
program vigener;
uses crt;
 
var a,b,c,d:string;
    i,j,k,t,s:integer; key:array [1..100]of integer;
begin
clrscr;
writeln('Vvedite text ');
readln(a);
b:='AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';
 
writeln('Vvedite kliucevoe slovo ');
readln(d);
 
for i:=1 to length(d) do begin
for j:=1 to length(b) do begin
if d[i]=b[j] then key[i]:=(j+1) div 2;
end;end;

for i:=1 to length(a) do begin
for j:=1 to length(b) do begin
s:= (i-1) mod length(d) +1;
t:=key[s];
k:=(j+2*t-1) mod length(b)+1;
if a[i]=b[j] then c:=c+b[k];
end;end;
writeln('&#144;Rezultat: ');
writeln(c);
readln;
end.


Прошу Вашей помощи.
Заранее благодарен!

 Профиль  
                  
 
 Re: Шифратор и дешифратор по Виженеру - проблема
Сообщение03.02.2013, 16:06 
Заслуженный участник


27/04/09
28128
Первая программа явно никуда не годна (догадайтесь, почему), даже если вторая неправильно работает.

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

-- Вс фев 03, 2013 19:14:55 --

Нет, вторая тоже не годится.

 Профиль  
                  
 
 Re: Шифратор и дешифратор по Виженеру - проблема
Сообщение07.02.2013, 11:41 


26/05/12
108
Минск, Беларусь
Используется синтаксис Delphi
var SourceText, KeyWord, EncryptText: string;
    i: integer;
begin
Readln(SourceText);
Readln(KeyWord);

for i:=1 to length(SourceText) do
  if ord(SourceText[i])+ord(KeyWord[i])<156
    then EncryptText:=EncryptText+chr(ord(SourceText[i])+ord(KeyWord[i])-65)
    else EncryptText:=EncryptText+chr(ord(SourceText[i])+ord(KeyWord[i])-91);

Writeln(EncryptText);
end.

 Профиль  
                  
 
 Re: Шифратор и дешифратор по Виженеру - проблема
Сообщение07.02.2013, 12:31 
Заслуженный участник


09/09/10
3729

(Оффтоп)

Как я все же люблю код с магическими константами. Кто такой 91? Кто такой 65? А если мне (не) повезло и char у меня — юникодный, и в ключевом слове все буквы лежат выше U+0400? Ладно, тут латинский алфавит, но со своим упорядочением, по-видимому — сдвиг "a" на двоечку дает "b", а не "c".

 Профиль  
                  
 
 Re: Шифратор и дешифратор по Виженеру - проблема
Сообщение07.02.2013, 14:15 


26/05/12
108
Минск, Беларусь
Забыла сказать: шифр и ключ. слово должны быть написаны большими американскими буквами))

(Оффтоп)

Joker_vD, просто было лень загонять числа в константы, а потом объяснять, что они означают :roll:

 Профиль  
                  
 
 Re: Шифратор и дешифратор по Виженеру - проблема
Сообщение07.02.2013, 15:59 
Заслуженный участник


27/04/09
28128
А и не надо загонять числа в константы, а потом что-то объяснять. Использованный вами Ord можно применять и к 'A'.

Tanechka в сообщении #681014 писал(а):
американскими буквами
:shock:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group