Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

ДЕШИФРАЦИЯ

              Глава о  криптографии  была бы не полной без краткого обзора
         дешифрации.  Искусство дешифрации - это в сущности метод  проб  и
         ошибок. Без применения цифрового компьютера благодаря исчерпываю-
         щему анализу могут быть расколоты относительно простые шифры. Од-
         нако,  более  сложные коды либо не могут быть расшифрованы,  либо
         требуют методов и ресурсов, которых не существует. Для простоты в
         данном  разделе сосредоточимся на дешифрации наиболее простых ко-
         дов.
              Если вы желаете расшифровать сообщение,  которое было зашиф-
         ровано с помощью метода простой замены со смещенным алфавитом, то
         вы должны попробовать все 26 возможных смещения,  чтобы выяснить,
         какое из них подходит.  Программа для реализации  этого  показана
         ниже:

              { программа дешифрования кода для шифра простой замены.
                сообщения не могут быть длинее 1000 символов }

              program brksub;
              type
                str80 = string[80];

              var
                inf: str80;
                message: array[1..1000] of char;{взять входное сообщение}
                ch: char;

              { данная функция возвращает TRUE,
                если ch является буквой алфавита }

              function isalpha(ch: char): boolean;
              begin
                isalpha := (upcase(ch)>='A') and (upcase(ch)<='X');
              end; {is alpha}

              procedure break(inf: str80);
              var
                infile: file of char;
                ch: char;
                done: boolean;
                sub, t, t2, l: integer;

              begin
                assign(infile, inf);
                reset(infile);

                done := FALSE;
                l := 1;
                repeat
                  Read(infile, message[l]);
                  message[l] := upcase(message[l]);
                  l := l+1;
                until eof(infile);
                l := l-1; { удалить знак конца файла }

                t := 0; sub := -1;
                { попробовать каждое возможное смещение }
                repeat
                  for t2 := 1 to l do begin
                    ch := message[t2];
                    if isalpha(ch) then
                    begin
                      ch := chr(ord(ch)+t);
                      if ch>'Z' then ch := chr(ord(ch)-26);
                    end;
                    Write(ch);
                  end;
                  WriteLn;
                  WriteLn('декодирован? Y/N): ');
                  ReadLn(ch);
                  if upcase(ch)='Y' then sub := t;
                  t := t+1;
                  until (t=26) or (upcase(ch)='Y');
                  if sub<> -1 then Write('offset is ', sub);
                  close(infile);

              end; {break}

              begin
                Write('введите имя входного файла: ');
                ReadLn(inf);
                break(inf);
              end.

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

              {программа дешифрации  кода  для шифров подстановки с произ-
               вольным алфавитом

              program beksub2;
              type
                str80 = string[80];

              var
                inf: str80;
                sub: string[26];
                message:array[1..1000] of char;
                ch: char;                       { ввод входного сообщения }

              { данная функция возвращает TRUE, если ch является
                буквой алфавита }
              function isalpha(ch: char): boolean;
              begin
                isalpha := (upcase(ch)>='A') and (upcase(ch)<='Z');
              end; { is alpha }

              procedure break2(inf: str80);
              var
                infile: file of char;
                ch: char;
                done: boolean;
                t, l: integer;

              begin
                assign(infile, inf);
                reset(infile);

                done := FALSE;

                l := 1;
                repeat
                  Read(infile, message[l]);
                  message[l] := upcase(message[l]);
                  l := l+1;
                until eof(infile);
                l := l-1; {очистка признака конца файла }

                repeat
                  Write('введите алфавит замены: ');
                  ReadLn(sub);
                  for t := 1 to l do

                  begin
                    ch := message[t];
                    if isalpha(ch) then
                     ch := sub[ord(ch)-ord('A')];
                    Write(ch);
                  end;
                  WriteLn;
                  WriteLn('декодирован ? (Y/N): ');
                  ReadLn(ch);
                  if upcase(ch)='Y' then done:=TRUE;
                until done;
                WriteLn('алфавит подстановки : ', sub);
                close(infile);
              end; {besub2}

              begin
                Write('введите имя входного файла: ');
                ReadLn(inf);
                break2(inf);
              end.

              В отличие от шифров замены шифры перестановки и  манипуляции
         битами  труднее  для  дешифрации методами проб и ошибок.  Если вы
         должны расшифровать более сложный код, то желаем удачи.

(с)Все права защищены

По всем интересующим вопросампрошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz