Помощь - Поиск - Пользователи - Календарь
Полная версия: Криптография
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Дюдя
Решил написать примитивный шифровальщик smile.gif
Идея такая: вводим слово, а программа сдвигает каждую букву вперед по алфавиту.
"А" меняется на "Б", "Б" на "В" и т.д.
Но беда - не сообразил, как сделать. Натолкните на верную мысль, пожалуйста smile.gif
Bokul
if a='z' then
a:='a'
else
a:=succ(a);
volvo
Хорошо. "Я" на что меняться будет? Опять на "А"?

Тогда легче просто описАть строку - алфавит и работать с ней:
Const
alpha: string = 'АБВ...ЭЮЯ';
{ естественно, строка должна быть заполнена ВСЕМИ символами алфавита }
...
readln(s);
for i := 1 to length(s) do
s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) + 1];


Bokul, а то, что множество символов кириллицы разорвано между 'п' и 'р', это ничего? У тебя там будет сбой smile.gif
Дюдя
Да, опять на А smile.gif
Зато полноценный криптограф получается, правда слабенький smile.gif Весьма...
volvo
Дюдя, сюда тоже загляни:
Шифрование текста
Bokul
Цитата
Зато полноценный криптограф получается, правда слабенький Весьма

Можно привести полностю в нечитаемий вид изменив чуточку алфавит( у Volvo это alpha), добавив
некоторые символы и цифры: №"%?*()_+459*-+ и т.д.
Дюдя
Получился шифровальщик для самых маленьких smile.gif
Код

program shtirliz;
uses crt;
const
alpha: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !@#$%^&*(),/2';

var
s: string;
i: byte;

begin
clrscr;
write('Enter text: ');
readln(s);
  for i := 1 to length(s) do
    s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) +1];
  for i := 1 to length(s) do
  write(s[i]);
readln;
write('Now we will decode it! Press enter!');
readln;
  for i := 1 to length(s) do
    s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) -1];
  for i := 1 to length(s) do
  write(s[i]);
readln;
end.
volvo
Дюдя, проверь на строке, в которой есть 'A' smile.gif
Bokul
Цитата
Получился шифровальщик для самых маленьких

s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) +1];

s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) +1];

Вместо единицы введи целочисленную переменную, ключ.
По нему ты сможешь шифровать строчку, и только зная его - расшифровать ее.
alpha: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !@#$%^&*(),/2';

Лучше разбросать, перемешать елементы алфавита между собой.
pavel_the_best
function code(a: string; f: integer): string;
var
e: string;
b: char;
c, d: integer;
begin
d := 1;
e := '';
while d <= length(a) do
begin
b := a[d];
c := ord(b);
c := c + f;
b := chr©;
e := e + b;
d := d + 1;
end;
Result := e;
end;

function decode(a:string; f:integer):string;
var
e: string;
b: char;
c, d: integer;
begin
d := 1;
e := '';
while d <= length(a) do
begin
b := a[d];
c := ord(b);
c := c - f;
b := chr©;
e := e + b;
d := d + 1;
end;
Result := e;
end;



var
a, b, c: string;
f: integer;
begin
randomize;
f:=random(1, 10);
read(a);
b := code(a, f);
writeLn(b);
c := decode(b, f);
writeLn©;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.