Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба 2 терентьев.docx
Скачиваний:
0
Добавлен:
12.02.2026
Размер:
3.57 Mб
Скачать

1.1. Исследование стандарта шифрования des (Data Encryption Standard)

Рис. 1. Начальное окно программы.

Рис. 2. Окно с генерацией ключей алгоритма DES.

Рис. 3. Окно с шифрованием DES.

Рис. 4. Окно с шифрованием DES.

Рис. 5. Окно с проверкой правильности работы DES.

Рис. 6. Фрагмент отчета с шифрованием по DES.

1.2. Исследование стандарта шифрования гост 28147-89

Рис. 7. Начальное окно программы.

Рис. 8. Окно с ключевой информацией алгоритма.

Рис. 9. Окно с основным шагом преобразования.

Рис. 10. Окно с шифрованием текста.

Рис. 11. Окно с расшифровкой текста.

Рис. 12. Окно с изменением битов в зашифрованном тексте.

Рис. 13. Окно с измененными битами в зашифрованном тексте.

Рис. 14. Фрагмент отчета с шифрованием по ГОСТ 28147-89.

1.3 Исследование стандарта шифрования aes (Rijndael)

Рис. 15. Начальное окно программы.

Рис. 16. Окно с генерацией ключей алгоритма Rijndael.

Рис. 17. Окно с шифрованием Rijndael.

Рис. 18. Окно с дешифрованием Rijndael.

Рис. 19. Окно с проверкой правильности Rijndael.

Рис. 20. Фрагмент отчета с шифрованием по Rijndael.

2. Исследование алгоритма шифрования с открытым ключом rsa

Рис. 21. Начальное окно программы.

Рис. 22. Окно с генерацией открытого и секретного ключей алгоритма RSA.

Рис. 23. Окно с преобразованием текста сообщения в цифровую форму.

Рис. 24. Окно с шифрованием блоков сообщения открытым ключом (e, n).

Рис. 25. Окно с расшифрованием сообщения секретным ключом d.

Рис. 26. Окно с проверкой правильности работы данной реализации алгоритма RSA.

Рис. 27. Фрагмент отчета с шифрованием по RSA.

Самостоятельное вычисление числовых значений криптограммы по простейшей реализации алгоритма RSA. Выполнено при помощи алгоритмического языка программирования Python.

Листинг.

def gcd(a, b): while b: a, b = b, a % b return a def mod_inverse(e, phi): # Нахождение обратного элемента по модулю phi for d in range(3, phi): if (e * d) % phi == 1: return d return None def rsa_encrypt_decrypt(): # Исходные данные P = 7 G = 17 text = "ОБЪЕКТ" # Числовые эквиваленты букв (из таблицы 5) char_to_num = { 'А': 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, 'Я': 33 } # 1. Вычисляем модуль N N = P * G print(f"1. Модуль N = P * G = {P} * {G} = {N}") # 2. Вычисляем функцию Эйлера phi = (P - 1) * (G - 1) print(f"2. Функция Эйлера φ(N) = (P-1)*(G-1) = {P - 1} * {G - 1} = {phi}") # 3. Выбираем открытую экспоненту E E = None for e in range(2, phi): if gcd(e, phi) == 1 and e > 7: E = e break if E is None: print("Не удалось найти подходящую открытую экспоненту E") return print(f"3. Открытая экспонента E = {E} (взаимно проста с {phi} и E > 7)") # 4. Вычисляем закрытую экспоненту D D = mod_inverse(E, phi) if D is None: print("Не удалось найти закрытую экспоненту D") return print(f"4. Закрытая экспонента D = {D} (E * D mod φ(N) = {E * D % phi})") # 5. Проверяем условие E ≠ D if E == D: print("Ошибка: E = D, что недопустимо") return print(f"5. Условие E ≠ D выполняется: {E} ≠ {D}") # 6. Преобразуем текст в числовую форму print(f"\n6. Текст для шифрования: '{text}'") numeric_text = [char_to_num[char] for char in text] print(f" Числовое представление: {numeric_text}") # 7. Шифрование print(f"\n7. Шифрование:") encrypted = [] for num in numeric_text: # C = M^E mod N encrypted_num = pow(num, E, N) encrypted.append(encrypted_num) print(f" {num}^{E} mod {N} = {encrypted_num}") print(f" Зашифрованное сообщение: {encrypted}") # 8. Дешифрование print(f"\n8. Дешифрование:") decrypted = [] for enc_num in encrypted: # M = C^D mod N decrypted_num = pow(enc_num, D, N) decrypted.append(decrypted_num) print(f" {enc_num}^{D} mod {N} = {decrypted_num}") print(f" Расшифрованное числовое представление: {decrypted}") # 9. Преобразуем обратно в текст num_to_char = {v: k for k, v in char_to_num.items()} decrypted_text = ''.join(num_to_char[num] for num in decrypted) print(f" Расшифрованный текст: '{decrypted_text}'") # 10. Проверка if text == decrypted_text: print(f"\n✓ Успех! Исходный и расшифрованный текст совпадают.") else: print(f"\n✗ Ошибка! Тексты не совпадают.") # Запускаем вычисления rsa_encrypt_decrypt()

Демонстрация работы программы.

Рис. 28. Результат работы программы.