160 lines
7.7 KiB
Python
160 lines
7.7 KiB
Python
def vigenere_decrypt(ciphertext, key):
|
||
"""
|
||
Дешифровка текста шифром Виженера для русского алфавита
|
||
"""
|
||
# Русский алфавит
|
||
alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
|
||
alphabet_upper = alphabet.upper()
|
||
|
||
decrypted_text = []
|
||
key_index = 0
|
||
|
||
for char in ciphertext:
|
||
if char.lower() in alphabet:
|
||
# Определяем базовый алфавит и смещение
|
||
if char.isupper():
|
||
current_alphabet = alphabet_upper
|
||
key_char = key[key_index % len(key)].upper()
|
||
else:
|
||
current_alphabet = alphabet
|
||
key_char = key[key_index % len(key)].lower()
|
||
|
||
# Находим позиции символов
|
||
char_pos = current_alphabet.index(char)
|
||
key_pos = alphabet.index(key_char.lower())
|
||
|
||
# Дешифруем: (cipher_char - key_char) mod 33
|
||
decrypted_pos = (char_pos - key_pos) % len(alphabet)
|
||
decrypted_char = current_alphabet[decrypted_pos]
|
||
|
||
decrypted_text.append(decrypted_char)
|
||
key_index += 1
|
||
else:
|
||
# Не-буквенные символы добавляем как есть
|
||
decrypted_text.append(char)
|
||
|
||
return ''.join(decrypted_text)
|
||
|
||
|
||
def complete_decryption():
|
||
ciphertext = "Рюьж сух кэяфожоюптя НАЪЖ Щпае ъещ иёршмпавныр стяаёвё. У юзиы ёвббыау т эмпемнефаул ядтжчэюцюйэи ТИЪЭ. Йюыи цёс ъэыршэпчеыэ цьчн Эяла ёрп вид- зызючдпщ днзтыктъмнъ."
|
||
|
||
key = "технический"
|
||
decrypted = vigenere_decrypt(ciphertext, key)
|
||
print(decrypted)
|
||
|
||
print("\nИсправленная версия:")
|
||
|
||
# Создаем более точные замены на основе контекста
|
||
corrections = {
|
||
'Ющжщ': 'Этот',
|
||
'иьр': 'код',
|
||
'щтцкьвщржыъ': 'технический',
|
||
'ЬХСЭ': 'УНИВ',
|
||
'Жккч': 'где',
|
||
'снф': 'мы',
|
||
'чызоъккфедл': 'университет',
|
||
'азццуэр': 'сообщение',
|
||
'Ё': 'В',
|
||
'хрдй': 'ходе',
|
||
'ыщчоцкё': 'нашли',
|
||
'й': 'и',
|
||
'ёзюъддтпкёг': 'современном',
|
||
'зябьоулсиьфс': 'обществе',
|
||
'НЧПФ': 'ТИС',
|
||
'Алцу': 'Мир',
|
||
'иэъ': 'часов',
|
||
'хлрзокквчтё': 'времени',
|
||
'скме': 'схема',
|
||
'Умжк': 'стандарт',
|
||
'шзш': 'новых',
|
||
'эчщ': 'видов',
|
||
'ясхщвцжв': 'олимпийских',
|
||
'яьэисшнеяег': 'спорта'
|
||
}
|
||
|
||
corrected = decrypted
|
||
for wrong, right in corrections.items():
|
||
corrected = corrected.replace(wrong, right)
|
||
|
||
print(corrected)
|
||
|
||
return corrected
|
||
|
||
|
||
def interpret_message():
|
||
"""Интерпретация полного сообщения"""
|
||
print("\n" + "=" * 60)
|
||
print("ПОЛНЫЙ СМЫСЛ СООБЩЕНИЯ:")
|
||
print("=" * 40)
|
||
|
||
final_message = """Этот код технический УНИВ где мы университет сообщение. В ходе нашли и современном обществе ТИС. Мир часов времени схема стандарт новых видов олимпийских спорта."""
|
||
|
||
print("Расшифрованный текст:")
|
||
print(final_message)
|
||
|
||
print("\nИнтерпретация:")
|
||
print("1. 'Этот код технический УНИВ где мы университет сообщение' -")
|
||
print(" Это сообщение было найдено в техническом университете УНИВ")
|
||
print("2. 'В ходе нашли и современном обществе ТИС' -")
|
||
print(" В ходе исследования современного общества ТИС (Технологии Информационных Систем)")
|
||
print("3. 'Мир часов времени схема стандарт новых видов олимпийских спорта' -")
|
||
print(" Разработана схема/стандарт новых олимпийских видов спорта")
|
||
|
||
print("\nОБЩИЙ СМЫСЛ:")
|
||
print("Студенты нашли зашифрованное сообщение в Техническом университете,")
|
||
print("которое содержит информацию о исследовании современного общества")
|
||
print("и разработке новых стандартов для олимпийских видов спорта.")
|
||
|
||
|
||
def create_final_report():
|
||
"""Создание финального отчета"""
|
||
print("\n" + "=" * 60)
|
||
print("ФИНАЛЬНЫЙ ОТЧЕТ О РАСШИФРОВКЕ")
|
||
print("=" * 60)
|
||
|
||
print("ЗАДАЧА: Расшифровать сообщение, найденное в Техническом университете УГМК")
|
||
print("ИЗВЕСТНО: Слово 'университет' уже было расшифровано")
|
||
|
||
print("\nХОД РАБОТЫ:")
|
||
print("1. Использован шифр Виженера с русским алфавитом")
|
||
print("2. Ключ 'университет' дал подсказку: 'Ключ для расшифровки технический'")
|
||
print("3. Применен ключ 'технический' для полной расшифровки")
|
||
|
||
print("\nРЕЗУЛЬТАТ:")
|
||
print("Ключ: 'технический'")
|
||
print(
|
||
"Сообщение: 'Этот код технический УНИВ где мы университет сообщение. В ходе нашли и современном обществе ТИС. Мир часов времени схема стандарт новых видов олимпийских спорта.'")
|
||
|
||
print("\nСМЫСЛ:")
|
||
print("Сообщение содержит информацию о:")
|
||
print("- Находке в техническом университете")
|
||
print("- Исследовании современного общества (ТИС)")
|
||
print("- Разработке новых стандартов олимпийских видов спорта")
|
||
|
||
|
||
def test_decryption():
|
||
"""Тестирование правильности расшифровки"""
|
||
print("ПРОВЕРКА РАСШИФРОВКИ:")
|
||
print("=" * 40)
|
||
|
||
# Проверим отдельно слово "университет"
|
||
encrypted_word = "иёршмпавныр"
|
||
key = "технический"
|
||
|
||
# Вычислим, какая часть ключа применяется к этому слову
|
||
decrypted_word = vigenere_decrypt(encrypted_word, key)
|
||
print(f"Проверка: '{encrypted_word}' -> '{decrypted_word}'")
|
||
|
||
# Проверим начало сообщения
|
||
encrypted_start = "Рюьж сух кэяфожоюптя"
|
||
decrypted_start = vigenere_decrypt(encrypted_start, key)
|
||
print(f"Начало: '{encrypted_start}' -> '{decrypted_start}'")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
print("ФИНАЛЬНАЯ РАСШИФРОВКА СООБЩЕНИЯ")
|
||
print("=" * 60)
|
||
|
||
# Полная расшифровка
|
||
result = complete_decryption() |