Отдел информационной безопасности компании «PostMail» перехватил подозрительное письмо, которое было отправлено с компьютера одного из сотрудников. После первичного анализа, не было установлено каким именно алгоритмом шифрования был зашифрован данный текст. Аналитики предоставили частоту появления букв в российских текстах (таблица 1) в надежде, что это поможет.
Определите, какое сообщение было передано и укажите в качестве ответа пароль администратора.
Дан шифротекст и частотный анализ русского алфавита для расшифровки текста. Все что нам остается, это просто посчитать частоту букв в шифротексте.
Напишем программу, которая рассчитает нам частоту встречаемости букв в шифротексте
import re
from collections import Counter
import math
def frequency_analysis(text):
# Извлекаем только русские буквы (а-я, ё), игнорируем регистр
letters = re.findall(r'[а-яё]', text.lower())
total = len(letters)
if total == 0:
print("В тексте не найдено ни одной русской буквы.")
return
freq = Counter(letters)
sorted_items = freq.most_common()
print(f"{'Буква':<6} {'Кол-во':<8} {'Процент':<10}")
print("-" * 25)
for letter, count in sorted_items:
# Вычисляем процент
percentage = (count / total) * 100
# Округляем ВВЕРХ до сотых: ceil(percentage * 100) / 100
percentage_ceil = math.ceil(percentage * 100) / 100
# Форматируем до 2 знаков после запятой (всегда два знака: 3.1 → 3.10)
formatted_percent = f"{percentage_ceil:.2f}"
print(f"{letter:<6} {count:<8} {formatted_percent} %")
# Текст для анализа
TEXT = """Зибъэкйкълц, ьилябсэ!
Бёмжиешобч л еэёч — ъйч, гшг ку б нжкэд. Яьл йъжб рэйкф йжкэё щшгйжъ. Гдшьб бн ъ кжк яэ кшвёбг аш щльгжв л ънжьш киб. Ёэ зжьъэьб — ч ёэ зижсл жщешёш!
Гшг б лйджъбдбйф: ъжк ьшёёуэ шьебёш. Шкшглв йкижыж зжйдэ зждлёжпб — ьж хкжыж зшкилдф нжьбк.
Джыбё: Ебижрёбпэёгж
Зшиждф: ЭъыэёбвГилкжвЙэкэъбг
Гйкшкб, зижъэиф, ёэк дб ичьже й йэиъэиёжв сэёгш — жнишёёбг бёжыьш зжьгшиедбъшэк эыж л ьъэиб. Мжёшибг ъжафеб зжкэеёээ, ш кж ъ гжибьжиэ йкжбк йкшиув мжкжхдэеэёк. Оэдув пшй зибьюкйч зичкшкфйч, эйдб йишщжкшэк! Сюдгёб кибяьу зж ъэёкбдчобжёёжв иэрюкгэ — хкж йбыёшд ьдч ежэыж пэджъэгш ъёлкиб. Хн, яшдф, пкж ёэдфач зижйкж зжаъжёбкф... Ля жпэёф йкижышч л ёбн йбйкэеш: ьшяэ щиэджг й пбзже киэщлэкйч, ьш эсю б збё-гжь ъъжьбкф пэиэа обмижълц гдшъбшклил. Щльф зиэьэдфёж жйкжижяэё — гшеэиу зжъйцьл, ьшяэ аш мшдфрбъжв гшикбёжв ъ нжддэ. Оуо! Б зжеёб: эйдб пкж — ъйю ёш кэщч йъшдчк. Ч пбйк, гшг йдэаш едшьэёош. Ш ку?..
Ашзжеёб: эйдб пкж — ч ёб зиб пюе. Л еэёч шдбщб яэдэаёжэ: ъ кл ёжпф щльл ъ «Слпфэе нъжйкэ» быишкф ъ ршнешку й Мюьжиже. Жё йъбьэкэдф! Гйкшкб, ёэ ашщульф ъугдцпбкф збкшёбэ ёш сбкгэ — кше ичьже йкжбк обиглдчигш, жёш ыльбк, гшг аъэиф. Хн, яшдф, пкж ёэдфач зижйкж ъщбкф гжь… Ёж л ёбн ьшяэ ёш гжмэъшигэ йкжбк щбжеэкибч!
Щльф кбрэ ъжьу, ёбяэ кишъу. Б ьш — зижъэиф, ёэк дб ъ гжибьжиэ ёжъжыж жнишёёбгш й щжижьжв. Ыжъжичк, жё щуърбв пэезбжё зж щжгйл. Жйкжижяёэв!
Яьл жкпюк."""
frequency_analysis(TEXT)
Результат работы программы:
Буква Кол-во Процент
-------------------------
ж 113 10.54 %
э 85 7.93 %
б 84 7.83 %
к 83 7.74 %
ш 72 6.72 %
ё 63 5.88 %
и 58 5.41 %
ъ 47 4.39 %
й 46 4.29 %
ь 42 3.92 %
г 41 3.83 %
д 40 3.73 %
л 34 3.17 %
з 27 2.52 %
ф 27 2.52 %
е 26 2.43 %
ч 23 2.15 %
п 18 1.68 %
щ 17 1.59 %
я 15 1.40 %
у 14 1.31 %
в 14 1.22 %
н 13 1.22 %
ы 13 1.22 %
а 12 1.12 %
о 8 0.75 %
ю 8 0.75 %
с 7 0.66 %
м 7 0.66 %
р 7 0.66 %
х 5 0.47 %
ц 4 0.38 %
Видно, что частота появления букв совпадает с той, что нам дано в задании, поэтому необходимо просто заменить все буквы, согласно частоте. Однако, у нас есть буквы, которые появляются одинаково частно. В этом случае придется подбирать вручную, когда перенесем уже известные буквы.
|
Буква открытого текста
|
Буква шифротекста
|
Буква открытого текста
|
Буква шифротекста
|
Буква открытого текста
|
Буква шифротекста
|
Буква открытого текста
|
Буква шифротекста
|
Буква открытого текста
|
Буква шифротекста
|
|
А
|
Ш
|
З
|
А
|
П
|
З/Ф
|
Ч
|
П
|
Я
|
Ч
|
|
Б
|
Щ
|
И
|
Б
|
Р
|
И
|
Ш
|
С/М/Р
|
|
|
В
|
Ъ
|
Й
|
У
|
С
|
Й
|
Щ
|
С/М/Р
|
|
|
Г
|
В/Н/Ы
|
К
|
Г
|
Т
|
К
|
Ъ
|
-
|
|
|
Д
|
Ь
|
Л
|
Д
|
У
|
Л
|
Ы
|
В/Н/Ы
|
|
|
Е
|
Э
|
М
|
Е
|
Ф
|
С/М/Р
|
Ь
|
З/Ф
|
|
|
Ё
|
O/Ю
|
Н
|
Ё
|
Х
|
В/Н/Ы
|
Э
|
Х
|
|
|
Ж
|
Я
|
О
|
Ж
|
Ц
|
O/Ю
|
Ю
|
Ц
|
|
Заменим текст, используя только известные буквы, неизвестные оставим под знаком – «?».
?риветствую, дружи?е!
Ин?орма?ия у меня — вся, как тй и ?отел. Жду свои ?ест? сотен баксов. Клади и? в тот же та?ник за будко? у в?ода три. Не ?одведи — я не ?ро?у обмана!
Как и условилис?: вот даннйе админа. Атаку? стро?о ?осле ?олуночи — до это?о ?атрул? ?одит.
Ло?ин: Миро?ниченко
?арол?: Ев?ени?Круто?Сетевик
Кстати, ?ровер?, нет ли рядом с серверно? ?енка — о?ранник ино?да ?одкармливает е?о у двери. ?онарик воз?ми ?отемнее, а то в коридоре стоит старй? ?отоэлемент. ?елй? час ?рид?тся ?рятат?ся, если сработает! ??лкни триждй ?о вентиля?ионно? ре??тке — это си?нал для мое?о человека внутри. Э?, жал?, что нел?зя ?росто ?озвонит?... Уж очен? стро?ая у ни? система: даже брелок с чи?ом требуется, да е?? и ?ин-код вводит? через ?и?ровую клавиатуру. Буд? ?редел?но осторожен — камерй ?овсюду, даже за ?ал??иво? картино? в ?олле. ?й?! И ?омни: если что — вс? на тебя свалят. Я чист, как слеза младен?а. А тй?..
За?омни: если что — я ни ?ри ч?м. У меня алиби железное: в ту ноч? буду в «?уч?ем ?восте» и?рат? в ?а?матй с ??дором. Он свидетел?! Кстати, не забйуд? вйключит? ?итание на ?итке — там рядом стоит ?иркулярка, она ?удит, как звер?. Э?, жал?, что нел?зя ?росто вбит? код… Но у ни? даже на ко?еварке стоит биометрия!
Буд? ти?е водй, ниже травй. И да — ?ровер?, нет ли в коридоре ново?о о?ранника с бородо?. ?оворят, он бйв?и? чем?ион ?о боксу. Осторожне?!
Жду отч?т.
Подставив буквы по смыслу, получим:
Приветствую, дружище!
Информация у меня — вся, как ты и хотел. Жду свои шесть сотен баксов. Клади их в тот же тайник за будкой у входа три. Не подведи — я не прощу обмана!
Как и условились: вот данные админа. Атакуй строго после полуночи — до этого патруль ходит.
Логин: Мирошниченко
Пароль: ЕвгенийКрутойСетевик
Кстати, проверь, нет ли рядом с серверной щенка — охранник иногда подкармливает его у двери. Фонарик возьми потемнее, а то в коридоре стоит старый фотоэлемент. Целый час придётся прятаться, если сработает! Щёлкни трижды по вентиляционной решётке — это сигнал для моего человека внутри. Эх, жаль, что нельзя просто позвонить... Уж очень строгая у них система: даже брелок с чипом требуется, да ещё и пин-код вводить через цифровую клавиатуру. Будь предельно осторожен — камеры повсюду, даже за фальшивой картиной в холле. Цыц! И помни: если что — всё на тебя свалят. Я чист, как слеза младенца. А ты?..
Запомни: если что — я ни при чём. У меня алиби железное: в ту ночь буду в «Щучьем хвосте» играть в шахматы с Фёдором. Он свидетель! Кстати, не забудь выключить питание на щитке — там рядом стоит циркулярка, она гудит, как зверь. Эх, жаль, что нельзя просто вбить код… Но у них даже на кофеварке стоит биометрия!
Будь тише воды, ниже травы. И да — проверь, нет ли в коридоре нового охранника с бородой. Говорят, он бывший чемпион по боксу. Осторожней!
Жду отчёт.