Помощь - Поиск - Пользователи - Календарь
Полная версия: Метод шифрации
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Angelok
Помогите с задачкой! Я начала решать следующим способом: перевожу коды в 2-ую систему и применяю xor, но у меня получаются одинаковые новые коды. Пожет кто-нибудь решал похожую?
Вот задачка: Один из методов шифрации сообщения является метод шифрования наложением гаммы. Алгоритм шифрования: берётся некоторое случайное число в диапазоне от 127 до 255 – это гамма. Код каждого символа строки заменяют кодом, получившимся в результате операции: новый код = старый код XOR гамма. Зашифруйте и дешифруйте сообщения пользователя.
Angelok
Вот что я сделала:
Код
Uses crt;
Var a,b,st,st1,a1,a2:string;
      x,i,k,t,r,y,cod,q: integer;
Begin
       Clrscr;
       Randomize;
       Writeln ('Введите строку');
       Readln(a);
       x:=127+random(128);
       Repeat
                  t:=x mod 2;
                  x:=x div 2;
                 str(t;st);
                 b:=b+st;
      Until x=0;
      Writeln(''Выберите что нужно сделать со строкой');        
      Writeln('1: зашифровать');
      Writeln('2: дешифровать');
      Reapeat
      readln(k);
      Until (k=1) or (k=2);
       q:=1;
       case k of
             1: While q> length(a) do
                  Begin
                          t:=ord(a[i]);
                          a1:='';
                          a2:='';
                              Reapeat
                                    r:=t mod 2;
                                   t:=t div 2;
                                   str(r,st1);
                                   a1:=st1+a1;
                             Until  t=0;
                             For  i:=1 to length(a1) do
                                  begin
                                          val(a1[i], x, cod);
                                           val(b[i],y,cod);
                                          str((x xor y), st);
                                          a2:=a2+st;
                                  end;
                            For i:=length(a2) downto 1 do
                             Write(a2[i]);
                             Write(' ');
                             q:=q+1;
                  end;
  2: begin
      end;
   Readkey;
end.
compiler
решение тут (шифруется/дешифруется файл)



Lapp
Цитата(Angelok @ 24.11.2007 19:58) *
перевожу коды в 2-ую систему и применяю xor, но у меня получаются одинаковые новые коды.
...
Зашифруйте и дешифруйте сообщения пользователя.

Angelok, ты перемудрила.
1. Ничего не нужно переводить в двоичную систему, оно уже все в двоичной и так (машины пока работают только в двоичной системе). XOR применяй прямо к самому символу (приведя его к байтовой форме посредством Ord).
2. Не нужно различать шифровку и дешифровку. Операция, примененная один раз - шифрует. Та же самая операция, примененная с результату шифрования - дешифрует.
То есть по сути тебе надо реализовать один цикл:
for i:=1 to Length(s) do s[i]:=Char(Ord(s[i]) xor Gamma)

С клавы нужно вводить название файла со строкой и ключ (Gamma).
Вот так.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.