Практические занятия по курсу ОиМП — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
Строка 34: Строка 34:
 
====Бонусное задание. Шифрование RSA====
 
====Бонусное задание. Шифрование RSA====
 
# Реализуйте [https://ru.wikipedia.org/wiki/RSA#.D0.90.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC_.D1.81.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D1.8F_.D0.BE.D1.82.D0.BA.D1.80.D1.8B.D1.82.D0.BE.D0.B3.D0.BE_.D0.B8_.D1.81.D0.B5.D0.BA.D1.80.D0.B5.D1.82.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9 алгоритм создания открытого и секретного ключей].
 
# Реализуйте [https://ru.wikipedia.org/wiki/RSA#.D0.90.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC_.D1.81.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D1.8F_.D0.BE.D1.82.D0.BA.D1.80.D1.8B.D1.82.D0.BE.D0.B3.D0.BE_.D0.B8_.D1.81.D0.B5.D0.BA.D1.80.D0.B5.D1.82.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9 алгоритм создания открытого и секретного ключей].
# Реализуйте [https://ru.wikipedia.org/wiki/RSA#.D0.A8.D0.B8.D1.84.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B8_.D1.80.D0.B0.D1.81.D1.88.D0.B8.D1.84.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5 алгоритмы шифрования и дешефрования]. Проверьте, что они работают.
+
# Реализуйте [https://ru.wikipedia.org/wiki/RSA#.D0.A8.D0.B8.D1.84.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B8_.D1.80.D0.B0.D1.81.D1.88.D0.B8.D1.84.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5 алгоритмы шифрования и дешифрования]. Проверьте, что они работают.
 
# Реализуйте алгоритм взлома. Функция должна принимать аргументы c, n и m (см. обозначения в Википедии) и возвращать d, приватный ключ, такое что m == c^d mod n.
 
# Реализуйте алгоритм взлома. Функция должна принимать аргументы c, n и m (см. обозначения в Википедии) и возвращать d, приватный ключ, такое что m == c^d mod n.
 +
# Научитесь замерять время выполнения каждой из четырёх функий
 
# Выберите некоторое значение m, например, m=100. Выведите таблицу:
 
# Выберите некоторое значение m, например, m=100. Выведите таблицу:
{|class="standard"
+
{|border="1"
 +
!
 
!n=11*13=143
 
!n=11*13=143
 
!n=17*31=527
 
!n=17*31=527
Строка 44: Строка 46:
 
!n=3533*3571=12616343
 
!n=3533*3571=12616343
 
|-
 
|-
!
+
!e=3
|
+
|||||||||
|
+
|-
 +
!e=17
 +
|||||||||
 +
|-
 +
!e=257
 +
|||||||||
 +
|-
 +
!e=65537
 +
|||||||||
 +
|-
 
|}
 
|}
 +
 +
На пересечении i-ой строки и j-ого столбца должно стоять четыре неотрицательных числа --- время работы каждого из четырёх алгоритмов при заданных e и n. Если данное e не взаимно просто с n, поставить прочерк.

Версия 00:59, 13 сентября 2014

Подготовка к занятиям

Для выполнения заданий необходимо установить интерпретатор Python.

Style guide.

Задачи, которые точно нужно уметь решать.

Рекомендации по выполнению

  1. Не используйте wildcard imports (from <module> import *), см. PEP8.
  2. Знак присваивания обособляйте пробелами с двух сторон. Плохо: a=b. Хорошо: a = b.
  3. Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.

Задание 1. Ввод-вывод

Задачи.

Список обязательных задач для каждого студента.

Задание 2.

Перед выполнением задания нужно установить библиотеку Pillow.

Задачи.

Замечание. Доступ к элементам pixels осуществляется так: pixels[i,j].

Бонусные задачи

  1. Реализуйте масштабирование.
  2. Реализуйте отражение.
  3. Реализуйте размытие.
  4. Напишите свой фильтр для обработки изображений.

Задание 3

Решите 20 любых задач из контеста Ввод-вывод.

Бонусное задание. Шифрование RSA

  1. Реализуйте алгоритм создания открытого и секретного ключей.
  2. Реализуйте алгоритмы шифрования и дешифрования. Проверьте, что они работают.
  3. Реализуйте алгоритм взлома. Функция должна принимать аргументы c, n и m (см. обозначения в Википедии) и возвращать d, приватный ключ, такое что m == c^d mod n.
  4. Научитесь замерять время выполнения каждой из четырёх функий
  5. Выберите некоторое значение m, например, m=100. Выведите таблицу:
n=11*13=143 n=17*31=527 n=109*157=17113 n=3557*2579=9173505 n=3533*3571=12616343
e=3
e=17
e=257
e=65537

На пересечении i-ой строки и j-ого столбца должно стоять четыре неотрицательных числа --- время работы каждого из четырёх алгоритмов при заданных e и n. Если данное e не взаимно просто с n, поставить прочерк.