Помощь - Поиск - Пользователи - Календарь
Полная версия: Криптография
Форум «Всё о Паскале» > 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';

Лучше разбросать, перемешать елементы алфавита между собой.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.