Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

В какой области можно применить шифратор текста методом Цезаря?

~Angelina~ Ученик (34), закрыт 14 лет назад
Лучший ответ
=)CS's|swat-gres Мастер (1608) 15 лет назад
Суть метода заключается в том, что данные шифруются при помощи некоторого ключа, в нашем случае это массив из десяти случайных чисел из диапазона 1-20. Т. е все данные разбиваются на группы по десять символов и, каждый символ шифруется методом Цезаря, но сдвиг осуществляется не на два, а на число с соответствующим индексом из массива ключа. (1-й на key[1], 2-й на key[2],...10-й на key[10], 1-й на key[1] и так далее до конца) . Для большей надежности шифрации будем использовать всю таблицу ASCII.
ПРИМЕР:
Ключ:
Индекс: 1 2 3 4 5 6 7 8 9 10
Число: 5 7 8 15 6 13 9 17 7 3

Шифруемый текст:
Он сел на скамью.
Зашифрованный текст:
У+(Ёл¬)-з#ц-и¬Єv7

Так как ключ при каждой шифрации меняется, то его нужно сохранять, но просто записывать его в файл было бы неразумно, потому что такой файл можно быстро расшифровать, зная метод шифрации. Поэтому для решения данной задачи я рекомендую вам делать следующее:
1) Использовать постоянный, известный только вам, ключ не сохраняя его в файле.
ДОСТОИНСТВА:
Расшифровать файл будет достаточно сложно, даже зная метод шифрации.
НЕДОСТАТКИ:
Злоумышленник, узнав ключ и зная метод щифрации, получит доступ ко всем вашим зашифрованным данным.
2) Сохранять ключ в файле специальным образом.
ДОСТОИНСТВА:
Все зашифрованные файлы будут зашифрованы по разному, что увеличивает надежность.
НЕДОСТАТКИ:
В зашифрованном файле будет храниться ключ к дешифрации, поэтому разгадав каким образом он там храниться злоумышленник получит доступ к ключу, а следовательно, зная метод шифрации, к зашифрованным данным. В нашем примере ключ записывается в конец файла следующим образом:
1-е число заменяется на символ с номером 1+это число из таблицы ASCII. Затем 10-е число заменяется на символ с номером 1+данное число, и так далее. Чтобы числа не слились в единое число между ними ставится #.

Ключ из примера будет выгледеть так:
#########
Программа на BASIC
CLS
COLOR 15, 1 PRINT "Шифрация Автор: Якунин Максим Сергеевич"
COLOR 15, 0
PRINT
INPUT "Введите имя шифруемого файла: "; inpF$
INPUT "Введите имя зашифрованного файла: "; OutF$
OPEN inpF$ FOR INPUT AS #1
OPEN OutF$ FOR OUTPUT AS #2
PRINT "Шифрую... "
WHILE NOT EOF(1)
INPUT #1, mstr$
FOR k = 1 TO LEN(mstr$)
sim$ = MID$(mstr$, k, 1)
GOSUB 10
MID$(mstr$, k, 1) = shif$
NEXT k
PRINT #2, mstr$
WEND
CLOSE #1
CLOSE #2
PRINT "Шифрация закончена! "
END
10 SELECT CASE sim$
CASE "а" TO "н"
shif$ = CHR$(ASC(sim$) + 2)
CASE "о"
shif$ = "р"
CASE "п"
shif$ = "с"
CASE "р" TO "э"
shif$ = CHR$(ASC(sim$) + 2)
CASE "ю"
shif$ = "а"
CASE "я"
shif$ = "б"
CASE "А" TO "Я"
shif$ = CHR$((ASC(sim$) - ASC("А") + 2) MOD 32 + ASC("А"))
CASE "a" TO "z"
shif$ = CHR$((ASC(sim$) - ASC("a") + 2) MOD 26 + ASC("a"))
CASE "A" TO "Z"
shif$ = CHR$((ASC(sim$) - ASC("A") + 2) MOD 26 + ASC("A"))
CASE ELSE
shif$ = sim$
END SELECT
RETURN

Программа на PASCAL

Program shifr_lk;
uses crt;
const l=10; {Размер ключа}
var M_key: array[1..l] of byte; {Массив хранящий числа ключа}
k,c,t: byte;{Служебные переменные}
i_name,o_name: string[12];{Имена файлов}
m_str: string[80];{Читаемая строка}
i_f,o_f: text;{Файловые переменные}
{------Возвращает зашифрованный символ---------------}
function sh(sim: char; n: word): char;
begin sh:=chr((ord(sim)-1+n) mod 254+1) end;
{----------------------------------------------------}
begin
clrscr;
randomize;{Включение генератора случайных чисел}
for c:=1 to l do m_key[c]:=1+random (20); {Формирование ключа}
textcolor (15);
textbackground(1);
insline;
writeln(' Шифратор Автор: Якунин Максим Сергеевич');
textbackground(0);
writeln;
write ('Введите имя шифруемого файла: ');
readln(i_name); {Ввод имени шифруемого файла}
write ('Введите имя зашифрованного файла: ');
readln (o_name);{Ввод имени зашифрованного файла}
assign (i_f,i_name);
assign (o_f,o_name);
reset (i_f); {Открываем файл с именем i_name для чтения}
rewrite (o_f);{Открываем файл с именем o_name для записи}
Writeln ('Шифрую ...');
Остальные ответы
8 Профи (568) 15 лет назад
Вообще-то метод давно уже устарел, советую скачать какую-нибудь книжку по криптографии.
А применять можно в бытовых целях. Переписку между друзьями - не более.
Через-чур старый метод.
Vesna Гуру (3994) 15 лет назад
действительно устаревший метод, криптостойкость этого алгоритма очень низкая, вряд ли где то можно использовать данный вид шифрования, поскольку легко раскрываем...
Похожие вопросы