Шифри перестановки, простої та складної заміни

Використання адитивних властивостей множин у системі шифрування Цезаря. Розгляд основних етапів процедури шифрування. Шифр перестановки з використанням шифруючої таблиці. З'ясування особливостей шифруючих таблиць Трисемуса та біграмного шифру Плейфейра.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 25.11.2020
Размер файла 57,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАІНИ

Черкаський державний технологічний університет

Факультет інформаційних технологій і систем

Кафедра робототехніки та спеціалізованих комп'ютерних систем

Курсова робота

з дисципліни «Захист інформації в комп'ютерних системах»

Виконав:

студент 3 курсу групи СКС-177

Білосуцев Н. Г.

Керівник Корпань Я.В.

Черкаси 2020

Зміст

шифр шифрування таблиця множина

Завдання

Теоретичний вступ

Виконання шифрів

1. Шифр перестановки з використанням шифруючої таблиці

2. Шифри перестановки (метод одиночної перестановки по ключу)

3. Шифр простої заміни ( система шифрування Цезаря )

4. Шифр простої заміни ( система Цезаря з ключовим словом )

5. Шифри простої заміни ( афінна система підстановок Цезаря )

6. Шифри простої заміни ( шифруючі таблиці Трисемуса )

7. Шифри простої заміни (біграмний шифр Плейфейра)

8. Шифри складної заміни (подвійний квадрат Уітстона)

Висновок

Додаток А

Завдання

Оберіть будь яке повідомлення українською мовою (довжина повідомлення 10-15 літер).

Здійсніть шифрування вашого повідомлення з використанням наступними системами шифрування:

1. Шифри перестановки (з використанням шифруючої таблиці).

2. Шифри перестановки (метод одиночної перестановки по ключу).

3. Шифри простої заміни (система шифрування Цезаря).

4. Шифри простої заміни (система Цезаря із ключовим словом).

5. Шифри простої заміни (афінна система підстановок Цезаря).

6. Шифри простої заміни (шифруючі таблиці Трисемуса).

7. Шифри простої заміни (біграмний шифр Плейфейра).

8. Шифри складної заміни («подвійний квадрат» Уітстона).

Зробіть висновки по розглянутих методах шифрування. Зазначте їх переваги та недоліки.

Текст шифрування:

Сьогодні буде дощ

Теоретичний вступ

Шифри перестановки (з використанням шифруючої таблиці)

При шифруванні перестановкою символи тексту, що шифрується, переставляються за певним правилом у межах блоку цього тексту. Шифри перестановки є найпростішими.

Одним із самих примітивних табличних шифрів перестановки є проста перестановка, для якої ключем служить розмір таблиці.

Шифри перестановки (метод одиночної перестановки по ключу)

Трохи більшою стійкістю до розкриття володіє метод шифрування, названий одиночною перестановкою по ключу. Цей метод відрізняється від попередніх тем, що стовпці таблиці переставляються по ключовомуслову, фразі або набору чисел довжиною в рядок таблиці.

Застосуємо як ключ, наприклад, слово

Шифри простої заміни (система шифрування Цезаря)

Шифр Цезаря єчастим випадком шифру простої заміни (одноалфавітної підстановки).

При шифруванні вихідного тексту кожна буква замінялася на іншу букву того ж алфавіту за наступним правилом. Заміщуюча буква, визначалася шляхом зсуву за алфавітом від вихідної букви на К букв. При досягненні кінця алфавіту виконувався циклічний перехід до його початку. Цезар використав шифр заміни при зсуві К= 3. Такий шифр заміни можна задати таблицею підстановок, що містить відповідні пари букв відкритого тексту й шифртексту.

Шифри простої заміни (система Цезаря із ключовим словом)

Особливістю цієї системи є використання ключового слова для зсуву й зміни порядку символів в алфавіті підстановки.

Виберемо деяке число k, 0<k<25, і слово або коротку фразу як ключове слово. Бажано, щоб всі букви ключового слова були різними. Нехай обрані слово DIPLOMAT як ключове слово й число k=5.

Шифри простої заміни (афінна система підстановок Цезаря)

У системі шифрування Цезаря використовувались тільки адитивні властивості множин цілихm. Однак символи множин m можна також помножувати по модулю m. Застосовуючи одночасно операції додавання й множення по модулю mнад елементами множини m, можна одержати систему підстановок, що називають афінною системою підстановок Цезаря.

Шифри простої заміни (шифруючі таблиці Трисемуса)

Для одержання шифру заміни звичайно використовувались таблиця для запису букв алфавіту й ключове слово (або фраза). У таблицю спочатку вписувалося по рядках ключове слово, причому букви які повторювались відкидалися. Потім ця таблиця доповнювалася буквами алфавіту, що не ввійшли в неї. Оскільки ключове слово або фразу легко зберігати в пам'яті, то такий підхід спрощував процеси шифрування й расшифрования.

Шифри простої заміни (біграмний шифр Плейфейра).

Основою шифру Плейфейрає шифруюча таблиця з випадково розташованими буквами алфавіту вихідних повідомлень.

Шифр передбачає шифрування пар символів (біграмм) замість одиночних символів, як в шифрі підстановки і в більш складних системах шифрування Віженера. Таким чином, шифр Плейфера більш стійкий до злому в порівнянні з шифром простої заміни, так як ускладнюється його частотний аналіз. Він може бути проведений, але не для символів, а для біграмм. Так як можливих біграмм більше, ніж символів, аналіз значно більш трудомісткий і вимагає більшого обсягу зашифрованого тексту.

Процедура шифрування включає наступні кроки.

1. Відкритий текст вихідного повідомлення розбивається на пари букв (біграми). Текст повинен мати парну кількість букв й у ньому не повинне бути біграм, що містять дві однакові букви. Якщо ці вимоги не виконані, то текст модифікується навіть через незначні орфографічні помилки.

2. Послідовність біграм відкритого тексту перетвориться за допомогою шифруючої таблиці, у послідовність біграмшифртексту за наступними правилами:

- Якщо обидві букви біграми відкритого тексту не попадають на один рядок або стовпець, тоді знаходять букви в кутах прямокутника, обумовленого даною парою букв. (У нашому прикладі це букви АЙОВ. Пари букв АЙ відображається в парі ОВ. Послідовність букв у біграмшифртексту повинна бути дзеркально розташованою стосовно послідовності букв у біграмі відкритого тексту.)

- Якщо обидві букви біграми відкритого тексту належать одному стовпцю таблиці, то буквами шифр тексту вважаються букви, які лежать під ними. (Наприклад, біграма НС дає біграму шифртекста ГЩ.) Якщо при цьому буква відкритого тексту перебуває в нижньому рядку, то для шифртекста береться відповідна буква з верхнього рядка того ж стовпця. (Наприклад, біграма ВШ дає біграму шифртекста ПА.)

- Якщо обидві букви біграми відкритого тексту належать одному рядку таблиці, то буквами шифртекста вважаються букви, які лежать праворуч від них. (Наприклад, біграма НО дає біграму шифртекстаДЛ.) Якщо при цьому буква відкритого тексту перебуває в крайньому правому стовпці, то для шифру беруть відповідну букву з лівого стовпця в тім же рядку. (Наприклад, біграма ФЦ дає біграму шифртекста ХМ.)

Шифри складної заміни («подвійний квадрат» Уітстона)

На відміну від полібіанського шифр "подвійний квадрат" використовує відразу дві таблиці, розміщені по одній горизонталі, а шифрування йде біграммами, як у шифрі Плей-Фейра. Ці не настільки складні модифікації привели до появи якісно нової криптографічної системи ручного шифрування. Шифр "подвійний квадрат" виявився дуже надійним і зручним та застосовувався Німеччиною навіть у роки другої світової війни.

Виконання шифрів

1. Шифр перестановки з використанням шифруючої таблиці

При шифруванні перестановкою символи тексту, що шифрується, переставляються за певним правилом у межах блоку цього тексту. Шифри перестановки є найпростішими.

Одним із самих примітивних табличних шифрів перестановки є проста перестановка, для якої ключем служить розмір таблиці.

Сьогодні буде дощ

С

Д

Д

Ь

Н

Е

О

І

Д

Г

Б

О

О

У

Щ

Зашифрований текст: СДД ЬНЕ ОІД ГБО ОУЩ

2. Шифри перестановки (метод одиночної перестановки по ключу)

Трохи більшою стійкістю до розкриття володіє метод шифрування, називаний одиночною перестановкою по ключу. Цей метод відрізняється від попередніх тем, що стовпці таблиці переставляються по ключовому слову, фразі або набору чисел довжиною в рядок таблиці.

Ключ - КАТОК

Сьогодні буде дощ

К

А

Т

С

Д

Д

Ь

Н

Е

О

І

Д

Г

Б

О

О

У

Щ

А

К

Т

1

2

3

Д

С

Д

Н

Ь

Е

І

О

Д

Б

Г

О

У

О

Щ

Зашифрований текст: ДСД НЬЕ ІОД БГО УОЩ

3. Шифр простої заміни ( система шифрування Цезаря )

Шифр Цезаря є частим випадком шифру простої заміни (одноалфавітної підстановки).

При шифруванні вихідного тексту кожна буква замінялася на іншу букву того ж алфавіту за наступним правилом. Заміщуюча буква, визначалася шляхом зсуву за алфавітом від вихідної букви на К букв. При досягненні кінця алфавіту виконувався циклічний перехід до його початку. Цезар використав шифр заміни при зсуві К= 1. Такий шифр заміни можна задати таблицею підстановок, що містить відповідні пари букв відкритого тексту й шифртексту.

Сьогодні буде дощ (k=1, m=33)

А

Б

В

Г

Ґ

Д

Е

Є

Ж

З

И

І

Ї

Й

К

Л

М

Н

О

П

Р

С

Т

У

Ф

Х

Ц

Ч

Ш

Щ

Ь

Ю

Я

Зашифрований текст: ТЮПҐПЕОЇ ВФЕЄ ЕПЬ

4. Шифр простої заміни ( система Цезаря з ключовим словом )

Особливістю цієї системи є використання ключового слова для зсуву й зміни порядку символів в алфавіті підстановки.

Виберемо деяке число k, і слово або коротку фразу як ключове слово. Бажано, щоб всі букви ключового слова були різними. Нехай обрані слово СОНЦЕ як ключове слово й число k=1.

Сьогодні буде дощ ( кодове слово = сонце, k = 1, m = 33)

С

О

Н

Ц

Е

А

Б

В

Г

Ґ

Д

Є

Ж

З

И

І

Ї

Й

К

Л

М

П

Р

Т

У

Ф

Х

Ч

Ш

Щ

Ь

Ю

Я

Зашифрований текст: ОЮНҐНЄЦЇ ВФЄА ЄНЬ

5. Шифри простої заміни ( афінна система підстановок Цезаря )

У системі шифрування Цезаря використовувались тільки адитивні властивості множин цілих m. Однак символи множин m можна також помножувати по модулю m. Застосовуючи одночасно операції додавання й множення по модулю m над елементами множини m, можна одержати систему підстановок, що називають афінною системою підстановок Цезаря.

Сьогодні буде дощ

t

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

2t+1

1

3

5

7

9

11

13

15

17

19

21

23

25

27

29

31

0

2

4

6

20

21

22

23

24

25

26

27

28

29

30

31

32

8

10

12

14

16

18

20

22

24

26

28

30

32

0. А

1. Б

2. В

3. Г

4. Ґ

5. Д

6. Е

7. Є

8. Ж

9. З

10. И

11. І

12. Ї

13. Й

14. К

15. Л

16. М

17. Н

18. О

19. П

20. Р

21. С

22. Т

23. У

24. Ф

25. Х

26.Ц

27.Ч

28.Ш

29.Щ

30.Ь

31.Ю

32. Я

СЬОГОДНІ = 21 30 18 3 18 5 17 11

БУДЕ = 1 23 5 6

ДОЩ = 5 18 29

Зашифрований текст: ИШҐЄҐІВУ ГКІЙ ІҐЦ

6. Шифри простої заміни ( шифруючі таблиці Трисемуса )

Для одержання шифру заміни звичайно використовувались таблиця для запису букв алфавіту й ключове слово (або фраза). У таблицю спочатку вписувалося по рядках ключове слово, причому букви які повторювались відкидалися. Потім ця таблиця доповнювалася буквами алфавіту, що не ввійшли в неї. Оскільки ключове слово або фразу легко зберігати в пам'яті, то такий підхід спрощував процеси шифрування й расшифрования.

Виберемо як ключ слово СОНЦЕ.

Сьогодні буде дощ

Кодове слово = СОНЦЕ

С

О

Н

Ц

Е

А

Б

В

Г

Ґ

Д

Є

Ж

З

И

І

Ї

Й

К

Л

М

П

Р

Т

У

Ф

Х

Ч

Ш

Щ

Ь

Ю

Я

Зашифрований текст: ҐЦДЙДЛЄУ ІБЛЗ ЛДН

7. Шифри простої заміни (біграмний шифр Плейфейра)

Основою шифру Плейфейрає шифруюча таблиця з випадково розташованими буквами алфавіту вихідних повідомлень.

Шифр передбачає шифрування пар символів (біграмм) замість одиночних символів, як в шифрі підстановки і в більш складних системах шифрування Віженера.

Сьогодні буде дощ

Сь ог од ні бу де до щ

Зашифрований текст: ЦЧ НС СҐ БЄ АТ ЗО ҐС ЬЧ

8. Шифри складної заміни (подвійний квадрат Уітстона)

На відміну полібіанського шифру, подвійний квадратвикористовує відразу дві таблиці, розміщені по одній горизонталі, а шифрування йде біграммами, як у шифрі Плей-Фейра. Ці не настільки складні модифікації привели до появи якісно нової криптографічної системи ручного шифрування. Шифр подвійний-квадрат виявився дуже надійним і зручним та застосовувався Німеччиною навіть у роки другої світової війни.

Сьогодні буде дощ

Сь ог од ні бу де до щ

Ь

Ш

З

А

В

Б

Р

Ю

Щ

Ж

Ґ

Г

С

П

Я

Ч

Є

Д

Й

О

Т

Е

Ц

Ї

К

Н

У

Ф

Х

І

И

Л

М

,

.

А

І

Р

Ч

Ю

Я

И

Б

Ї

С

Ш

,

П

З

В

Й

Т

Щ

Ц

Ж

О

Г

К

У

Х

Є

Н

Ґ

Л

.

Ь

Ф

Д

Е

М

Зашифрований текст: ЗІЖ ГИХЗЯДТ.ВЦИН

Висновок

Більшість засобів захисту інформації базується на використанні криптографічних шифрів і процедур шифрувания-розшифрування. В даній курсовій я навчився методам визначення вимог до системи захисту інформації роботі, дослідив та реалізував різні криптографічні шифри серед яких були: шифр Цезаря, шифр простої перестановки, біграммний квадрат Плейфейра та інші. В ході виконання роботи виявилося, що шифри з ключем надійніші ніж без нього, при однаковій складності шифрування, а біграмні шифри виявилися найскладнішими у шифруванні, а отже і найнадійнішими з представлених криптографічних шифрів.

Додаток А

1. Шифри перестановки (з використанням шифруючої таблиці)

#include <iostream>

#include <fstream>

#include <string>

#include <conio.h>

using namespace std;

string encode(long lSize, long * lKey, string fPath)

{

long i, j;

string text, line, encstr;

ifstream ifs(fPath.c_str());

if(!ifs)

cout<<"Error open file: "<<fPath.c_str()<<endl;

else

{

while(getline(ifs,line))

text += line;

ifs.close();

cout<<"input string: "<<text.c_str()<<endl;

for(i = 0; i < text.length(); i += lSize)

{

line = "";

for(j = 0; j < lSize; j++)

line += text[i + j];

for(j = 0; j < lSize; j++)

encstr += line[lKey[j]];

}

}

return encstr;

}

string decode(long lSize, long * lKey, string fPath)

{

long i, j;

string text, line, decstr;

ifstream ifs(fPath.c_str());

if(!ifs)

cout<<"Error open file: "<<fPath.c_str()<<endl;

else

{

while(getline(ifs,line))

text += line;

ifs.close();

cout<<"input string: "<<text.c_str()<<endl;

decstr = text;

for(i = 0; i < text.length(); i += lSize)

{

for(j = 0; j < lSize; j++)

decstr[i + lKey[j]] = text[i + j];

}

}

return decstr;

}

int main()

{

char chr;

long lKey[5] = {0};

long i, lSize= sizeof(lKey)/sizeof(lKey[0]);

bool bMenu = true;

string text;

while(bMenu)

{

cout<<"***MENU***\n";

cout<<"E - encode\n";

cout<<"D - decode\n";

cout<<(chr = getch())<<endl;

switch(toupper(chr))

{

case 'E':

cout<<"Enter key-block: \n";

for(i = 0; i < lSize; i++)

{

cout<<"KEY["<<i + 1<<"] = ";

cin>>lKey[i];

}

text = encode(lSize, lKey, "encode.txt");

cout<<"Encoded text: "<<text.c_str()<<endl;

break;

case 'D':

cout<<"Enter key-block: \n";

for(i = 0; i < lSize; i++)

{

cout<<"KEY["<<i + 1<<"] = ";

cin>>lKey[i];

}

text = decode(lSize, lKey, "decode.txt");

cout<<"Decoded text: "<<text.c_str()<<endl;

break;

default:

cout<<"Unsupported key is pressed\n";

break;

}

cout<<"Press Y for see MENU once again\n";

cout<<"Any other key - EXIT\n";

cout<<(chr = getch())<<endl;

if(toupper(chr) != 'Y')

bMenu = false;

system("cls");

}

system("pause");

return 0;

}

2. Шифри перестановки (метод одиночної перестановки по ключу).

#include <iostream>

#include <fstream>

#include <string>

#include <conio.h>

using namespace std;

var st,kl,kk:string;

t,tt:array[1..10,1..10] of char;

n,m,i,j,k:byte;

x:char;

begin

st:='СТОЛЯРОВ ПАХОМ АНДРЕЕВИЧ';

kl:='СКАНЕР';

kk:=kl;

n:=6;

m:=length(st)div n ;

k:=0;

for j:=1 to n do

for i:=1 to m do

begin

inc(k);

if st[k]=' ' then st[k]:='_';

t[i,j]:=st[k];

end;

for i:=1 to n-1 do

for j:=i+1 to n do

if kk[i]>kk[j] then

begin

x:=kk[i];

kk[i]:=kk[j];

kk[j]:=x;

for k:=1 to m do

begin

x:=t[k,i];

t[k,i]:=t[k,j];

t[k,j]:=x;

end;

end;

writeln('Зашифрованное сообщение');

for i:=1 to m do

for j:=1 to n do

write(t[i,j]);

writeln;

for i:=1 to n do

for j:=1 to n do

if kk[j]=kl[i] then

for k:=1 to m do

tt[k,i]:=t[k,j];

writeln('Расшифрованное сообщение');

k:=0;

for j:=1 to n do

for i:=1 to m do

begin

k:=k+1;

write(tt[i,j]);

end;

end.

3. Шифри простої заміни (система шифрування Цезаря).

#include <iostream>

#include <string>

using namespace std;

int main() {

string str;

cin >> str;

for(int i = 0 ; i < str.length(); i++){

if(str[i] == 'Z') str[i] = 'A';

else str[i]++;

}

cout << str;

return 0;

}

4. Шифри простої заміни (система Цезаря із ключовим словом)

#include <iostream>

#include <fstream>

#include <string>

#include <conio.h>

using namespace std;

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int i = 0, k;

char ABC[] = { 'А','Б','В','Г','Д','Е','Ж','З','И',

'Й','К','Л','М','Н','О','П','Р','С',

'Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ',

'Ы','Ь','Э','Ю','Я','_','.',',','0',

'1','2','3','4','5','6','7','8','9' };

char msg[80];

cout << "Введите сообщение, которое будет закодировано: " << endl;

cin.getline(msg, 80);

cout << "\nВведите сдвиг:" << endl;

cin >> k;

cout << endl;

char* begin = ABC;

char* end = ABC + sizeof(ABC);

for (; msg[i]; ++i)

{

char* ch = find(begin, end, msg[i]);

if (ch != end) msg[i] = *(begin + (ch - begin + k) % sizeof(ABC));

}

cout << "Полученное закодированное сообщение: " << endl;

cout << msg << endl;

return 0;

}

5. Шифри простої заміни (афінна система підстановок Цезаря)

!/usr/bin/perl

# Аффинная система подстановок Цезаря

# --dynax60

use strict;

use warnings;

use encoding 'utf8';

use Encode qw(decode);

my ($cmd, $a, $b, $txt) = @ARGV;

&usage unless @ARGV == 4;

$a = int($a);

$b = int($b);

$txt = decode 'utf-8', $txt;

# Определяем алфавит

my @alph = ('A'..'Z', 'a'..'z', 0..9,

(map { chr } ord( 'А' ).. ord( 'Я' ), ord('а').. ord('я')), "Ё", "ё"

);

my $m = scalar(@alph);

my (%e, %d) = ();

my $action = {

'encrypt' => sub { return join '', map { $e{$_} } split //, shift },

'decrypt' => sub { return join '', map { $d{$_} } split //, shift },

};

&usage unless exists $action->{$cmd};

for (0..$m-1) {

my $idx = ($a*$_+$b) % $m;

$e{ $alph[$_] } = $alph[$idx];

$d{ $alph[$idx] } = $alph[$_];

}

print $action->{$cmd}->($txt), "\n";

sub usage { die "Usage: $0 <encrypt|decrypt> A B text\n" }

6. Шифри простої заміни (шифруючі таблиці Трисемуса)

import sys

g_alphabet = u"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ."

def Trisemus(key, strval, action):

keyword, (height, width) = key

isEncode = True if action == "encode" else False

isDecode = True if action == "decode" else False

# построение таблицы

pos = 0

table = [['.' for x in xrange(width)] for y in xrange(height)]

hchars = {}

for i in keyword + g_alphabet:

if hchars.get(i) == None:

hchars[i] = pos

table[pos / width][pos % width] = i

pos += 1

if pos >= width * height:

break

#print '\n'.join(' '.join(j for j in table[i]) for i in range(len(table))) # debug: output table

result = ""

for i in strval:

pos = hchars.get(i)

if pos != None:

x = pos % width

if isEncode:

y = (pos / width + 1) % height

elif isDecode:

y = (pos / width - 1 + height) % height

else:

y = pos / width % height # do nothing

result += table[y][x]

else: # далее нужно выбрать одно из действий с символами, отсутсвующими в таблице:

result += i # оставить неизменными

#result += "" # удалить

#result += table[height - 1][width - 1] # заменять на определённый

return result

# end def

keyword = u"ПРЕФЕКТУРА"

tablesize = (5, 7)

key = (keyword, tablesize)

print "key = " + str(key)

inputstr = unicode(raw_input("Text to encode: "), sys.stdout.encoding)

inputstr = u"АББАТ ТРИСЕМУС, ТАБЛИЦА." if inputstr == "" else inputstr # default

print inputstr

s = Trisemus(key, inputstr, "encode")

print s

s = Trisemus(key, s, "decode")

print s

7. Шифри простої заміни (біграмний шифр Плейфейра)

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <string.h>

char Al[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя!@\"#№$;%^:&?*()-_+={}[]\/<>.,~`0123456789";

char MyText[] = ""; // введенный текст

char Key[] = ""; // введенный ключ

char R[10][16]; // полученная решетка

char ResText[] = ""; // полученный текст

char Pust[] = ""; // пустышка

char Resh[10][16];

char Alphabet[]="";

char txt[]="";

void CreateR() //создание и вывод решётки шифрования

{

int p=0;

for (int i=0;i<10;i++)

for (int j=0;j<16;j++)

{Resh[i][j]=Al[p]; p++;}

for (int i=0;i<10;i++) { printf("\n");

for (int j=0;j<16;j++) printf("%c

",Resh[i][j]); }

}

void EditText() //вставка пустышек и проверка текста на чётность

{

int Len = strlen(MyText);

if (Len % 2 != 0)

strcat(MyText,Pust);

}

void Encrypt() //шифрование

{

// индексы букв в столбцах

int ind_x1 = 0;

int ind_y1 = 0;

int ind_x2 = 0;

int ind_y2 = 0;

int k = 0;

char txt[20]="\0";

for (int d=0; d<strlen(MyText); d++)

txt[d]=MyText[d];

for (int d=0;d<strlen(ResText);d++)

ResText[d]=' ';

if (strlen(txt)%2!=0)

xt[strlen(txt)]=Pust[0];

while (k<strlen(txt))

{

for (int l=0; l<10; l++)

for (int m=0; m<16; m++)

{

if (txt[k] == Resh[l][m])

{

ind_x1 = l;

ind_y1 = m;

}

if (txt[k+1] == Resh[l][m])

{

ind_x2 = l;

ind_y2 =m;

}

}

// Если буквы находятся в одной строке

if (ind_x1 == ind_x2)

{

if (ind_y1 == 15)

{

ResText[k]=Resh[ind_x1][0];

ResText[k+1]=Resh[ind_x2][ind_y2+1];

}

else

if (ind_y2 == 15)

{

ResText[k]=Resh[ind_x1][ind_y1+1];

ResText[k+1]=Resh[ind_x2][0];

}

else

{

ResText[k]=Resh[ind_x1][ind_y1+1];

ResText[k+1]=Resh[ind_x2][ind_y2+1];

}

}

// Если буквы находятся в одном столбце

if (ind_y1 == ind_y2)

{

if (ind_x1 == 9)

{

ResText[k]=Resh[0][ind_y1];

ResText[k+1]=Resh[ind_x2+1][ind_y2];

}

else

if (ind_x2 == 9)

{

ResText[k]=Resh[ind_x1+1][ind_y1];

ResText[k+1]=Resh[0][ind_y2];

}

else

{

ResText[k]=Resh[ind_x1+1][ind_y1];

ResText[k+1]=Resh[ind_x2+1][ind_y2];

}

}

// Если буквы находятся в разных строках и разных столбцах

if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))

{

ResText[k]=Resh[ind_x1][ind_y2];

ResText[k+1]=Resh[ind_x2][ind_y1];

}

k = k + 2;

}

}

void Decrypt() //расшифровка

{

// индексы букв в столбцах

int ind_x1 = 0;

int ind_y1 = 0;

int ind_x2 = 0;

int ind_y2 = 0;

int k = 0;

char txt[20]="\0";

for (int d=0; d<strlen(ResText); d++)

txt[d]=ResText[d];

for (int d=0;d<strlen(txt);d++)

ResText[d]=' ';

while (k<strlen(txt))

{

for (int n=0; n<10; n++)

for (int o=0; o<16; o++)

{

if (txt[k] == Resh[n][o])

{

ind_x1 = n;

ind_y1 = o;

}

if (txt[k+1] == Resh[n][o])

{

ind_x2 = n;

ind_y2 = o;

}

}

// Если буквы находятся в одной строке

if (ind_x1 == ind_x2)

{

if (ind_y1 == 0)

{

ResText[k]=Resh[ind_x1][15];

ResText[k+1]=Resh[ind_x2][ind_y2-1];

}

else

if (ind_y2 == 0)

{

ResText[k]=Resh[ind_x1][ind_y1-1];

ResText[k+1]=Resh[ind_x2][15];

}

else

{

ResText[k]=Resh[ind_x1][ind_y1-1];

ResText[k+1]=Resh[ind_x2][ind_y2-1];

}

}

// Если буквы находятся в одном столбце

if (ind_y1 == ind_y2)

{

if (ind_x1 == 0)

{

ResText[k]=Resh[9][ind_y1];

ResText[k+1]=Resh[ind_x2-1][ind_y2];

}

else

if (ind_x2 == 0)

{

ResText[k]=Resh[ind_x1-1][ind_y1];

ResText[k+1]=Resh[9][ind_y2];

}

else

{

ResText[k]=Resh[ind_x1-1][ind_y1];

ResText[k+1]=Resh[ind_x2-1][ind_y2];

}

}

// Если буквы находятся в разных строках и разных столбцах

if ((ind_x1 != ind_x2) && (ind_y1 != ind_y2))

{

ResText[k]=Resh[ind_x1][ind_y2];

ResText[k+1]=Resh[ind_x2][ind_y1];

}

k = k + 2;

}

}

void main()

{

int d;

L1:

printf("\n\nVvedite komandu:\n1-Sozdanie tablici perekodirovki\n2-Vvod teksta\n3-Shivrovanie i vivod\n4-Deshifrovanie i vivod\n0-Vihod\n");

scanf("%d",&d);

switch (d) {

case 1:

CreateR();

printf("\n DONE!");

goto L1;

case 2:

printf("Vvedite tekst: ");

scanf("%s",&MyText);

void EditText();

goto L1;

case 3:

Encrypt();

printf("\n%s",ResText);

goto L1;

case 4:

Decrypt();

printf("\n%s",ResText);

goto L1;

default:

break;

}

}

8. Шифри складної заміни (подвійний квадрат Уітстона)

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;

const Alph: String = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ.,-!"?:;^';

cRange: integer = 5;

rRange: integer = 6;

type

TForm1 = class(TForm)

RG: TStringGrid;

LG: TStringGrid;

Label1: TLabel;

Label2: TLabel;

edt_RKey: TEdit;

edt_LKey: TEdit;

Memo1: TMemo;

Memo2: TMemo;

btn_FillTable: TButton;

btn_Encrypt: TButton;

btn_Decrypt: TButton;

btn_Exit: TButton;

Label3: TLabel;

procedure btn_ExitClick(Sender: TObject);

procedure Memo1Change(Sender: TObject);

procedure Memo2Change(Sender: TObject);

procedure edt_RKeyChange(Sender: TObject);

procedure btn_FillTableClick(Sender: TObject);

procedure btn_EncryptClick(Sender: TObject);

procedure btn_DecryptClick(Sender: TObject);

private { Private declarations }

procedure FillTbl(G: TStringGrid; sKey: String);

function Crypt(_Text: String; Mode: integer): String;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function PrepareStr(s: String; k: integer): String;

var c1, c2: String;

begin

s:= Trim(s);

case k of

0: begin

c1:= #13#10;

c2:= '^';

end;

1: begin

c1:= '^';

c2:= #13#10;

end;

end;

s:= StringReplace(s, c1, c2, [rfReplaceAll]);

result:= ANSIUpperCase(s);

end;

function CheckText(_s: String): boolean;

var i: integer;

begin

result:= true;

_s:= PrepareStr(_s, 0);

for i:= 1 to Length(_s) do

if Pos(_s[i], Alph) = 0 then

begin

ShowMessage('Текст содержит недопустимый символ: "' + _s[i] +'"'#13'Текст может содержать только буквы русского алфавита!');

result:= false;

Exit;

end;

end;

function FindInTable(G: TStringGrid; s: String): TPoint;

var i, j: integer;

begin

for i:= 0 to rRange do

for j:= 0 to cRange do

if G.Cells[j, i] = s then

begin

result.X:= i;

result.Y:= j;

Exit;

end;

end;

function TForm1.Crypt(_Text: String; Mode: integer): String;

var a, b: String;

r, l: TPoint;

begin

result:= '';

if odd(Length(_Text)) then _Text:= _Text + ' ';

while Length(_Text) > 0 do

begin

if Mode = 0 then a:= _Text[1] else a:= _Text[2];

if Mode = 0 then b:= _Text[2] else b:= _Text[1];

Delete(_Text, 1, 2);

l:= FindInTable(LG, a);

r:= FindInTable(RG, b);

a:= RG.Cells[r.Y, l.X];

b:= LG.Cells[l.Y, r.X];

if Mode = 0

then result:= result + a + b

else result:= result + b + a;

end;

end;

procedure TForm1.btn_DecryptClick(Sender: TObject);

begin

Memo1.Text:= PrepareStr(Crypt(Memo2.Text, 1), 1);

Label3.Caption:= 'Нажмите Выход для завершения работы';

end;

procedure TForm1.btn_EncryptClick(Sender: TObject);

var s: String;

begin

s:= PrepareStr(Memo1.Text, 0);

if not CheckText(s) then Exit;

Memo2.Text:= Crypt(s, 0);

Label3.Caption:= 'Нажмите Расшифровать для замены исходного текста.'

end;

procedure TForm1.btn_ExitClick(Sender: TObject);

begin

Close;

end;

procedure TForm1.btn_FillTableClick(Sender: TObject);

begin

if not((CheckText(edt_LKey.Text)) and (CheckText(edt_RKey.Text))) then Exit;

FillTbl(LG, edt_LKey.Text);

FillTbl(RG, edt_RKey.Text);

Label3.Caption:= 'Введите текст для шифрования и нажмите Зашифровать';

end;

procedure TForm1.edt_RKeyChange(Sender: TObject);

begin

btn_FillTable.Enabled:= (Length(Trim(edt_LKey.Text)) > 0) and (Length(Trim(edt_RKey.Text)) > 0);

end;

procedure TForm1.FillTbl(G: TStringGrid; sKey: String);

var L: TStringList;

i, r, c: integer;

begin

sKey:= PrepareStr(sKey, 0);

L:= TStringList.Create;

r:= 0;

c:= 0;

for i:= 1 to Length(sKey) do

if L.IndexOf(sKey[i]) = -1 then L.Add(sKey[i]);

for i:= 1 to Length(Alph) do

if L.IndexOf(Alph[i]) = -1 then L.Add(Alph[i]);

for i:= 0 to L.Count - 1 do

begin

G.Cells[c, r]:= L.Strings[i];

inc(c);

if c > cRange then

begin

c:= 0;

inc(r);

end;

end;

L.Free;

end;

procedure TForm1.Memo1Change(Sender: TObject);

begin

btn_Encrypt.Enabled:= (Length(Trim(Memo1.Text)) > 0) and (btn_FillTable.Enabled = true);

end;

procedure TForm1.Memo2Change(Sender: TObject);

begin

btn_Decrypt.Enabled:= Length(Trim(Memo1.Text)) > 0

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Вивчення особливості програмування додатків на мові C++ Builder. Шифрування повідомлення методом перестановки букв за маршрутами типу гамільтонський. Огляд існуючих аналогів. Розгляд необхідних вимог до конфігурації електронно-обчислювальної машини.

    контрольная работа [1,2 M], добавлен 24.07.2014

  • Опис та криптоаналіз шифрів простої заміни, перестановки та багатоалфавітних шифрів. Стандарт DЕS. Мережі Фейстеля. Криптосистеми з відкритим ключем. Структура системи RSA. Означення та принципи організації криптографічних протоколів. Кодування алфавіта.

    дипломная работа [782,5 K], добавлен 29.01.2013

  • Історія виникнення та розвиток методів шифрування. Особливості розробки програми, що виконує шифрування за допомогою доповнювального модуля, який надає доступ до самої програми. Вибір ефективного методу шифрування даних. Розробка відповідного інтерфейсу.

    курсовая работа [1,9 M], добавлен 21.07.2011

  • Відомі підходи до реалізації потокового шифрування даних. Регістр зсуву з оберненими зв’язками. Комбінуючий та фільтруючий генератор. Потоковий шифр Alpha1. Розробка структурної схеми алгоритму шифрування Alpha1. Розробка блоку керування пристрою.

    курсовая работа [185,6 K], добавлен 09.04.2013

  • Задачі інформаційних систем криптографічного захисту інформації. Принципи шифрування даних на основі використання хеш-функцій. Розробка програмних компонентів інформаційних систем криптографічного захисту інформації. Види криптографічних алгоритмів.

    курсовая работа [2,7 M], добавлен 23.01.2012

  • Сутність і напрямки вивчення методики шифрування алгоритмами збивання. Поняття та структура алгоритму DES, оцінка його переваг та недоліків. Підключ як деяка ключова інформація, яка отримується з основного ключа шифрування, його аналіз і значення.

    лабораторная работа [99,5 K], добавлен 18.11.2015

  • Аналіз основних способів захисту інформації. Криптографічні алгоритми: безключові, одноключові, двоключові, хешування, симетричне та асиметричне шифрування. Електронний підпис. Потокові шифри (шифри гамування). Хешування паролів. Транспортне кодування.

    презентация [543,4 K], добавлен 19.08.2013

  • Криптографія як область знань щодо перетворення повідомлень у незрозумілу для сторонніх осіб форму, а також перевірки істинності цих повідомлень. Класифікація шифрів, принципи частотного криптоаналізу. Таблиця заміни при шифруванні, приклади шифрування.

    реферат [36,0 K], добавлен 06.04.2010

  • Основи технології запису на оптичні диски. Довготривале зберігання інформації на оптичних носіях. Дослідження існуючих програмних і технічних засобів шифрування даних. Можливі рішення проблем і попередження злому. Програмні засоби шифрування даних.

    дипломная работа [4,0 M], добавлен 27.01.2012

  • Спосіб шифрування, в якому для шифрування і дешифрування застосовується один криптографічний ключ. Класифікація симетричних криптоалгоритмів. Стандарт блочних шифрів AES. Порівняння з асиметричними криптосистемами. Скремблер: переваги та недоліки.

    презентация [73,3 K], добавлен 19.08.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.