Помогите с задачкой! Я начала решать следующим способом: перевожу коды в 2-ую систему и применяю xor, но у меня получаются одинаковые новые коды. Пожет кто-нибудь решал похожую? Вот задачка: Один из методов шифрации сообщения является метод шифрования наложением гаммы. Алгоритм шифрования: берётся некоторое случайное число в диапазоне от 127 до 255 – это гамма. Код каждого символа строки заменяют кодом, получившимся в результате операции: новый код = старый код XOR гамма. Зашифруйте и дешифруйте сообщения пользователя.
Автор: Angelok 25.11.2007 0:18
Вот что я сделала:
Код
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 25.11.2007 1:31
решение http://www.cyberguru.ru/programming/pascal/turbopascal-encyclopaedia2-page19.html (шифруется/дешифруется файл)
Автор: Lapp 25.11.2007 6:33
Цитата(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). Вот так.