Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №4

.pdf
Скачиваний:
5
Добавлен:
10.08.2024
Размер:
593.04 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Факультет Инфокоммуникационных сетей и систем

Кафедра Защищенных систем связи

Дисциплина Математические основы защиты информации

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №4

Расширенный алгоритм Евклида. Расширенный бинарный алгоритм Евклида

(тема отчета)

Информационная безопасность (10.03.01)

(код и наименование направления/специальности)

Студент:

 

 

 

Ерохин А.Г.

ИКБ-03

(Ф.И.О.)

 

 

(подпись)

Студент:

 

 

 

Чистяков А.С.

ИКБ-03

(Ф.И.О.)

 

 

(подпись)

Студент:

Пантюхин М.А. ИКБ-03

(Ф.И.О.) (подпись)

К.тех.н, доцент кафедры ЗСС: Кушнир Д.В.

(Ф.И.О.) (подпись)

Санкт-Петербург

2022

Часть 1. Расширенный алгоритм Евклида.

Кроме вычисления d=НОД(a, b), алгоритм Эвклида позволяет дополнительно определить два целых числа α и β, таких что:

+ = - соотношение Безу; α и β – коэффициенты Безу.

Замечание, «почти всегда» если α положительна, то β отрицательно и наоборот.

Алгоритм в общем виде:

 

 

 

Найти: НОД(a, b)

 

 

 

= 1 + 1

и

1

= 1 + 1

= 1 2 + 2

и

2

= 2 + 2

………………………………………………………………………

 

=

 

+

и

=

+

−3

−2

−1

−1

−1

−1

−1

 

=

 

 

 

 

 

−2

−1

 

 

 

 

 

= 0

Ответ: НОД(a, b)= −1

Задание 1. Выполнить «вручную» расширенный алгоритм Евклида

1.Необходимо выбрать свой вариант (варианты) (вариант определяется номером студента в списке группы, если в бригаде несколько человек, то необходимо выполнить соответствующее число соответствующих вариантов).

2.Выполнить «вручную» расширенный алгоритмом Евклида.

Вариант 7.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a = 22, b = 56

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

B

 

q

 

R

 

 

12

=

56

+

(-2)

*

22

 

22

=

56

*

0

+

56

 

 

10

=

22

+

(-1)

*

12

 

56

=

22

*

2

+

12

 

 

2

=

12

+

(-1)

*

10

 

22

=

12

*

1

+

10

2

= 56 +(-2) * 22+

(-1) * (22 + (-1) * (56 + (-2) * 22)

12

=

10

*

1

+

2

2

= 56 +(-2) * 22+

(-1) * (56 * (-1) + 3 * 22)

10

=

2

*

5

+

0

2

= 56 +(-2) * 22+

56 + (-3) * 22

 

 

 

 

 

 

 

2 = (-5) * 22 + 2 * 56

 

 

 

Ответ: НОД(22;56) = 2; α = -5 и β = 2

2

Вариант 17.

 

 

 

 

 

 

 

 

 

 

 

 

a = 34, b = 20

 

 

 

 

 

 

 

 

 

 

 

 

A

 

B

 

q

 

R

 

14

=

34

+

(-1)

*

20

 

34

=

20

*

1

+

14

 

6

=

20

+

(-1)

*

14

 

20

=

14

*

1

+

6

 

2

=

14

+

(-2)

*

6

 

14

=

6

*

2

+

2

2 = 14 + (-2) * (20 + (-1) * (34 + (-1) * 20)

6

=

2

*

3

+

0

2 = 34 + (-1) * 20 + (-2) * (2 * 20 + (-1) * 34)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 = 34 + (-1) * 20 + (-4) * 20 + 2 * 34

 

 

 

 

 

 

 

2 = 3 * 34 + (-5) * 20

 

 

Ответ: НОД(34;20) = 2; α = 3 и β = -5

Вариант 24.

 

 

 

 

 

 

 

 

 

 

 

 

a = 18, b = 52

 

 

 

 

 

 

 

 

 

 

 

 

A

 

B

 

q

 

R

 

16

=

52

+

(-2)

*

18

 

18

=

52

*

0

+

52

 

2

=

18

+

(-1)

*

16

 

52

=

18

*

2

+

16

2 = 18 + (-1) * (52 + (-2) * 18))

18

=

16

*

1

+

2

2 = 18 + (-1) * 52 + 2 * 18

 

16

=

2

*

8

+

0

2 = 3 * 18 + (-1) * 52

 

 

Ответ: НОД(18;52) = 2; α = 3 и β = -1

Задание 2. Выполнить «программно» расширенный алгоритм Евклида

1.Необходимо выбрать свой вариант (варианты) (вариант определяется номером студента в списке группы, если в бригаде несколько человек, то необходимо выполнить соответствующее число соответствующих вариантов).

2.Выполнить вычисление расширенного алгоритма Евклида в среде Excel или в любой другой программной среде, которая позволяет выводить промежуточные шаги выполнения алгоритма.

Для данного задания была написана программа на языке программирования С++, выполняющая расширенный алгоритм Евклида, с отображением всех промежуточных вычислений.

3

Листинг:

#include <iostream>

using namespace std;

class Euclid {

int A, B, x_new, y_new;

int x_old_2 = 1, y_old_2 = 0, x_old_1 = 0, y_old_1 = 1; public:

Euclid(int _a, int _b) { if (_a >= _b) {

A = _a; B = _b;

}

else {

A = _b; B = _a;

}

cout.width(35); cout << " | "; cout.width(16); cout << x_old_2; cout.width(19); cout << " | "; cout.width(16); cout << y_old_2; cout.width(19);

cout << " | " << endl;

cout.width(35); cout << " | "; cout.width(16); cout << x_old_1; cout.width(19); cout << " | "; cout.width(16); cout << y_old_1; cout.width(19);

cout << " | " << endl;

int q = A / B; int R = A % B;

x_new = x_old_2 - q * x_old_1; y_new = y_old_2 - q * y_old_1; x_old_2 = x_old_1;

x_old_1 = x_new; y_old_2 = y_old_1; y_old_1 = y_new;

while (R > 0) { cout.width(7);

cout << A << " = ";

4

cout.width(7); cout << B << " * "; cout.width(2); cout << q << " + "; cout.width(7); cout << R; cout.width(2); cout << " | ";

A = B;

B = R;

q = A / B; R = A % B;

cout.width(7);

cout << x_old_2 << " - "; cout.width(2);

cout << q << " * "; cout.width(7);

cout << x_old_1 << " = "; cout.width(7);

cout << x_new << " | ";

cout.width(7);

cout << y_old_2 << " - "; cout.width(2);

cout << q << " * "; cout.width(7);

cout << y_old_1 << " = "; cout.width(7);

cout << y_new << " | " << endl;

x_new = x_old_2 - q * x_old_1; y_new = y_old_2 - q * y_old_1; x_old_2 = x_old_1;

x_old_1 = x_new; y_old_2 = y_old_1; y_old_1 = y_new;

}

cout << endl;

cout << "НОД(" << _a << ";" << _b << ") = " << B; if (_a >= _b) {

cout << " = " << _a << " * " << x_old_2 << " + " << _b << " * " << y_old_2 << endl; cout << "Коэффициенты Безу: " << x_old_2 << " и " << y_old_2 << endl;

}

else {

cout << " = " << _a << " * " << y_old_2 << " + " << _b << " * " << x_old_2 << endl; cout << "Коэффициенты Безу: " << y_old_2 << " и " << x_old_2 << endl;

}

}

~Euclid() {}

};

5

int main()

{

setlocale(LC_ALL, "Rus"); int a, b;

cout << "Введите A: "; cin >> a;

cout << "Введите B: "; cin >> b;

cout << endl; cout.width(51); cout << "X"; cout.width(35);

cout << "Y" << endl; Euclid Work(a, b);

}

Вариант 7.

a = 2830444, b = 4298262

Вариант 17.

a = 2123276, b = 1070242

6

Вариант 24.

a = 2861708, b = 3438222

Часть 2. Обратный и противоположный элемент по модулю.

Нахождение обратного элемента по модулю.

Обратным к числу a по модулю n называется такое число b (обычно обратное к a обозначают как a-1), что: a*b = 1 mod n ( a * −1 = 1 mod n ).

Рассмотрим выражение: a * х + n * y = 1 (это и есть соотношение Безу) возьмём от обеих частей уравнения остаток по модулю n, то получим: a * х = 1 mod n, х – и есть обратный элемент к a.

Пример: m=11, a=3; 4*3+(-1)*11=1; 4*3=1 mod 11, т.е. −1 = 4.

Если получаете отрицательный ответ – переведите в положительный: через n-х.

Нахождение противоположного элемента по модулю.

Противоположным к числу a по модулю n называется такое число b, что: a+b = 0 mod n. b записывают в виде положительного числа.

Задание 3. Найти обратный элемент по модулю.

1. Необходимо выбрать свой вариант (варианты) (вариант определяется номером студента в списке группы, если в бригаде несколько человек, то необходимо выполнить соответствующее число соответствующих вариантов).

2. Найти обратный элемент по модулю.

7

Вариант 7. a = 3, n = 29

−1 = 1 3 −1 = 1 29=

Вариант 17. a = 13, n = 19

−1 = 1 13 −1 = 1 19=

Вариант 24. a = 5, n = 17

−1 = 1 5 −1 = 1 17=

8