Предмет: Программно-аппаратная защита информации

Преподаватель: Оцоков Шамиль Алиевич

Курс: 4.

Университет: РТУ МИРЭА (Московский Институт Радиоэлектроники и Автоматики)
Факультет (институт): КБСП (Комплексной безопасности и специального приборостроения)


Составить программу для демонстрации шифрования и дешифрования с помощью алгоритма Шамира.

Взято из Контрольной работы №3: Задача №2, Вариант 2

Код

def obrat(num1, num2):
    for i in range(num2 - 1):
        if (num1 * i) % num2 == 1:
            return i
        else:
            pass

# Пусть А хочет передать В сообщение mA = 22. А выбирает p = 53, cA = 11 и вычисляет dA = 19.
# Аналогично, В выбирает параметры сB = 17 и dB= 49.


message = int(input('-> ВАШЕ СООБЩЕНИЕ: '))
print()
p = int(input('-> Вы абонент А: придумайте число "p": '))
print(' <- ВЫ ПЕРЕДАЛИ ЧИСЛО P АБОНЕНТУ Б')

x1 = int(input('-> Вы абонент А: Придумайте число x1: '))
x2 = obrat(x1, p-1)                                         # Нахождение обратного x2
print(' <- Ваше число x2 =', x2)
print()

y1 = int(input('-> Вы абонент Б: Придумайте число x1: '))
y2 = obrat(y1, p-1)                                         # Нахождение обратного y2
print(' <- Ваше число y2 =', y2)
print()

X1 = message ** x1 % p                                      # Шифр MESSAGE с помощью x1 абонента A, результат X1
print(' <- X1 =', X1)
print(' <- ВЫ ПЕРЕДАЛИ ЧИСЛО X1 АБОНЕНТУ Б')

Y1 = X1 ** y1 % p                                           # Шифр X1 с помощью y1 абонента Б, результат Y1
print(' <- Y1 =', Y1)
print(' <- ВЫ ПЕРЕДАЛИ ЧИСЛО Y1 АБОНЕНТУ А')

X2 = Y1 ** x2 % p                                           # Шифр Y1 с помощью x2 абонента А, результат X2
print(' <- X2 =', X2)
print(' <- ВЫ ПЕРЕДАЛИ ЧИСЛО X2 АБОНЕНТУ Б')

Y2 = X2 ** y2 % p                                           # Шифр X2 с помощью y2 абонента Б, результат Y2
print(' <- Y2 =', Y2)
print(' <- ВЫ ПЕРЕДАЛИ ЧИСЛО Y1 АБОНЕНТУ А')

print()

if Y2 == message:
    print(' <- СООБЩЕНИЕ ' + str(Y2) + ' ПЕРЕДАНО УСПЕШНО.')
else:
    print('E <- В процессе передачи сообщения ' + str(message) + 'была допущена ошибка\n'
        '     при расшифровке сообщения получилось это:', str(Y2))

Вывод

-> ВАШЕ СООБЩЕНИЕ: 22

-> Вы абонент А: придумайте число "p": 53
 <- ВЫ ПЕРЕДАЛИ ЧИСЛО P АБОНЕНТУ Б
-> Вы абонент А: Придумайте число x1: 11
 <- Ваше число x2 = 19

-> Вы абонент Б: Придумайте число x1: 17
 <- Ваше число y2 = 49

 <- X1 = 26
 <- ВЫ ПЕРЕДАЛИ ЧИСЛО X1 АБОНЕНТУ Б
 <- Y1 = 35
 <- ВЫ ПЕРЕДАЛИ ЧИСЛО Y1 АБОНЕНТУ А
 <- X2 = 14
 <- ВЫ ПЕРЕДАЛИ ЧИСЛО X2 АБОНЕНТУ Б
 <- Y2 = 22
 <- ВЫ ПЕРЕДАЛИ ЧИСЛО Y1 АБОНЕНТУ А

 <- СООБЩЕНИЕ 22 ПЕРЕДАНО УСПЕШНО.

Полезные ссылки

You May Also Like

Генератор паролей на C++

Пример генератора паролей на C++, который генерирует пароль длиной от 8 до 32 символов, состоящего из цифр, букв верхнего и нижнего регистра и служебных символов.

Мультфильм — Курсовая работа по Python

Курсовая работа, с которой я столкнулся на втором курсе. Просто делать анимацию на Python 3 слишком скучно, поэтому я реализовал несколько состояний объекта, которые вызываются нажатием клавиш...

Дневник Сьюзен

Суть «игры» проста, существуют цепочки заданий, в каждом из которых необходимо использовать возможности администрирования системы с помощью терминала, чтобы найти заветный ключ к следующему заданию в цепочке.