Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МиСКЗИ Лабораторная работа 1.pdf
Скачиваний:
0
Добавлен:
16.07.2026
Размер:
1.12 Mб
Скачать

Заключение

В ходе выполнения данной лабораторной работы были изучены классические алгоритмы шифрования и расшифрования, а также получены практические навыки их реализации.

При шифровании и последующем расшифровании аффинным шифром, шифром Хилла и их рекуррентными версиями, шифром Виженера получились исходные версии шифруемых строк.

Для текста, использованного= 7 = 2 для криптоанализа аффинного шифра, были найдены ключи и и расшифрован текст.

В криптоанализе шифра Хилла для заданных матриц была найдена ключевая матрица и проверена ее достоверность.

Для текста, использованного для криптоанализа шифра Виженера, было найдено слово-ключ «ковер» и расшифрован текст.

24

Приложение А

(обязательное)

Исходный текст для криптоанализа аффинного шифра

р надб дувтеээдб ытиъц лпвцеэец щрегъ идцэвае хтвэыащы мъуэеъуцетъаепъ. щаеппвм ув щаеппвмдц аыэзащы лтъуецъщаяе лещдгэяе гвщя – лд дюэдцз щаеипыээдцз щдщзюз эв ивмюдчд мърдчд гепдреив. дэъ твйдавфа йещлтетярэд, эе атейзы уврдюв, рще пжфа ъ пжфа щрдб цепиъб лещди ъу йзюзсечд р лтдкпде. ивмювы лвювфсвы лещгъэив юдйврпыеа эелтъцеаэяб кепидряб урзи р дйсъб щръща, дагечд ивмеащы, гад лдцесеэъе лдпэъащы урзидц цдтщидчд лтъпърв. в рда ъ дйпвюваепж надб эедйягэдб идцэвая, дэ цеюпеээд ъ репъгврд кещарзеа рюдпж щаеппвмеб. ръю з эечд дувйдгеээяб. ечд удрза щцетаж. эе лтдщад щцетаж иви эеиде дйсее, вйщатвиаэде лдэыаъе. щоетв юеыаепжэдщаъ ювээдчд юдпмэдщаэдчд пъьв, чдрдты лд лтврюе, рдрще ювме эе щоетв, в щидтее лпдщидщаж. ави рда, лпдщидщаж ечд юеыаепжэдщаъ рипфгвеа р щейы лпдщиъб цът. нада цът, иви щпеюзеа ъу эвурвэъы, щдреткеээд лпдщиъб ъ лдидъащы (адгэее, еюеа ретхдц) эв щлъэвх геаятех дчтдцэях щпдэдр. щпдэя щадыа эв лвэьъте чъчвэащидб уреуюэдб гетелвхъ лд ъцеэъ репъиъб в’азъэ. юъщи дйтвцпеэ рдюдлвюдц, леэъщаяе ивщивюя идадтдчд йещидэегэдб пвръэдб дйтзкървфащы р идщцдщ. згеэяе лдющгъавпъ, гад квэщя тевпжэдчд щзсещардрвэъы щадпж даитдреээд вйщзтюэдчд цътв тврэыфащы дюэдцз эв цъппъдэ. дюэвид рдпкейэъиъ лдющгъавпъ, гад квэщ «дюъэ эв цъппъдэ» рялвювеа р юерыаъ щпзгвых ъу юещыаъ. щцетаж щ хдпдюэяц лдщазиървэъец летеюръчвеащы лд ряпдмеээдцз гетэдб ъ йепдб лпъаидб лдпз. ечд идщаыэяе лвпжья летейътвфа тыюя увэыаях щрдеб твйдадб лещдгэях гвщдр. лтъ надц дэ йдтцдгеа гад-ад, эд йдтцдавэъе увчпзквеащы лпдаэяцъ щипвюивцъ дюеыэъы ъ ивлфкдэв. р идэье идэьдр дэ, лд-ръюъцдцз, эвхдюъа, гад ъщивп. щцетаж дщадтдмэд щэъцвеа лтъйдт щ лдпиъ ъ лдюэдщъа и йпъмвбкеб щреге. дэ юетмъа гвщя

25

авиъц дйтвудц, гад щреа йпещаъа ъ ъчтвеа эв лзуваях щаеэивх. дэ лтъщавпжэд щцдатъа эв цвпеэжизф щъыфсзф адгиз. эелдюръмэяб ручпыю чпвуэъь, р чпзйъэвх идадтях цетьвеа юяцэяб чдпзйдрваяб щреа уреуюэях азцвээдщаеб, дйрдпвиървеа рщецътэзф гетелвхз, идадтвы лпяреа щирдуж лтдщатвэщард, цетэд чтейы чъчвэащиъцъ пвщавцъ. ее лвэьътж ъузтдюдрвэ тзйьвцъ да ртеувркъхщы р эечд идцеа ъ ъщлестеэ ыцвцъ да цеаедтъадр. щцетаж уэвеа: эвщавэеа юеэж, идчюв ювме репъидцз в’азъэз лтъюеащы зцетеаж. эз ъ твйдаеэив лтеющадъа адчюв, эегечд щивуваж! эд щебгвщ щцетаж лдчтзмвеащы р щъэе-уепеэде репъидпелъе щвцдчд юъщив, щдретквфсечд цеюпъаепжэяе лдрдтдая лдю итдхдаэяц, ртвсвфсъцщы рдитзч эечд лд дтйъае щдпэьец. ручпыю щцетаъ летецесвеащы р эвлтврпеэъъ чъчвэащидб чдтэдб чтыюя, эвуярвецдб дрьелъищиъцъ чдтвцъ. наъ чдтя лдпэя зитдцэях юдпъэ, эедмъювээд руюяцвфсъхщы заещдр ъ лтдг., ъ лтдг. рддйсе, эв ирвютваэяб цеат уюещж лтъхдюъащы авиде идпъгещард твуэддйтвуэях чедчтвоъгещиъх ырпеэъб, гад щвцъ дрьелъиъ эе уэвфа, гад щ эъцъ юепваж. уюещж ьвтъа щрды, лтъщзсвы ъцеээд дрьелъивц лдчдюв, идадтвы хвтвиаетъузеащы дщаетреэепяцъ реатвцъ ъ летцвэеэаэяцъ чтдувцъ. в идчюв ъюеа эе цеэее летцвэеэаэяб юдмюж, ад щдуювеащы рлегвапеэъе, йзюад иадад эв эейе р лтълвюие упдщаъ дйтзкървеа эв уецпф ьепяе азгъ ктвлэепъ. эеидадтяе заретмювфа: рще над лдадцз, гад р дрьелъивх эвкпв щейе лтъщавэъсе ютерэыы эелтътзгеээвы цвчъы. эд ря щвцъ уэвеае, гечд щадъа нав пфющивы йдпадрэы. щцетаж цъчвеа, лтъсзтървыщж, ъ рчпыюярвеащы р лдтдщкъе чзщадб атврдб щипдэя. рда дэ щцдатъа эв идэитеаэяб щипдэ. эв идэитеаэде лдпе. эв идэитеаэдчд йечзсечд лд лдпф цвпжгъив. щцетаж эвйпфювеа. в уваец чдпдщдц, лдюдйэяц зювтз ивцеээдб лпъая д чтвэъа, лтдъуэдщъа: – юв. р лдгре надб хдпцъщадб, дйтяръщадб цещаэдщаъ лтъщзащардрвпд эегад цвчъгещиде. дй надц ырэд щръюеаепжщардрвп щатвээяб дааеэди, лтъщзсъб лтдъутвщавфсъц уюещж твщаеэъыц. ъцеээд лднадцз цещаэдщаж эвурвпъ итвец диавтъэдрдб атвря. ютзчъц

26

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

27

цдмэд злтврпыаж казидръэдб, щдщадысеб ъу дюэъх идпеэ? р ювээяб идэитеаэяб юеэж нав «казидръэв» рд рещж длдт эещпвщж лд лдпф, твуцвхървы тзивцъ ъ рдлы рд рщф чпдаиз. даеь ъ юыюы цдтв эвйпфювпъ щъф эезаекъаепжэзф ивтаъэз, щады эв рящдидб ивцеээдб щаеэе. – гад эе зипвюярвеащы р чдпдре, – лтдъуэещ даеь (идадтдчд урвпъ пеуеи), – ави над ад, гад лаъья ювме эе зпеавфа. ы йя эелтецеээд зпеаеп, ещпъ й зръюеп, гад р цдец эвлтврпеэъъ юръмеащы авидб змвщ. – нх… зюъръаепжэвы ресж – гепдрегещиде аепд. эдчъ з эечд увлпеавфащы, ъ лтъ рщец лтъ адц дэ зцзютыеащы эвйтваж лдтыюдгэяе дйдтдая. цдт юдщаъч чтвэъья рщлвхвээдб гвщаъ лдпы. дйдмтвркъбщы юд лдпэдб эердуцдмэдщаъ летеюръчважщы чдпзйж, итеэыщж, пеэърд зщазлъп ецз юдтдчз. – уэвекж, щ щетюьец-ад з эечд рще р лдтыюие, – асваепжэд лдюйътвы щпдрв, лтдъуэещ пеуеи. – вчв. эелдпвюиъ щд рщец дщавпжэяц. – дэ дгеэж виизтваеэ. рщечюв зйътвеащы р юдце. еща эецэдчд, – юдйвръп пеуеи. – юв гад авц, ы ъ щвц над ръмз. пеуеи щидпжуэзп ручпыюдц р щадтдэз йтвав, идадтяб эе датярвыщж щцдатеп эв эейд.

28

Приложение Б

(обязательное)

Код программы для расшифровки текста для криптоанализа аффинного шифра

import math import os

def extended_gcd(a, b):

"""Расширенный алгоритм Евклида"""

if a == 0:

return b, 0, 1

gcd, x1, y1 = extended_gcd(b % a, a) x = y1 - (b // a) * x1

y = x1

return gcd, x, y

def mod_inverse(a, m):

"""Нахождение обратного числа по модулю"""

gcd, x, _ = extended_gcd(a % m, m) if gcd != 1:

raise ValueError(f"Обратного числа не существует! НОД({a}, {m}) = {gcd}") return (x % m + m) % m

def get_default_russian_alphabet():

return list("абвгдежзийклмнопрстуфхцчшщъыьэюя")

def decrypt_affine(input_file_path, n, a, b, alphabet=None):

if not os.path.exists(input_file_path):

print(f"Ошибка: Файл '{input_file_path}' не найден.") return

with open(input_file_path, 'r', encoding='utf-8') as f: ciphertext = f.read()

if alphabet is None:

print("Используется стандартный русский алфавит (32 символа, без ё)") alphabet = get_default_russian_alphabet()

if len(alphabet) != n:

29

if n < len(alphabet): alphabet = alphabet[:n]

elif n > len(alphabet):

print("Ошибка: Размер алфавита больше, чем указанный") return

else:

if len(alphabet) != n:

print(f"Ошибка: Длина алфавита ({len(alphabet)}) не совпадает с указанным N ({n}).")

return

char_to_idx = {char: idx for idx, char in enumerate(alphabet)} idx_to_char = {idx: char for idx, char in enumerate(alphabet)}

try:

a_inv = mod_inverse(a, n) except ValueError as e:

print(f"Ошибка: {e}") return

print(f"\nПараметры расшифровки:") print(f"Размер алфавита (N): {n}")

print(f"Коэффициент a: {a} (обратный a_inv: {a_inv})") print(f"Коэффициент b: {b}")

print("-" * 30)

decrypted_text = []

for char in ciphertext:

if char in char_to_idx: y = char_to_idx[char]

x = (a_inv * (y - b)) % n decrypted_text.append(idx_to_char[x])

else: decrypted_text.append(char)

result = "".join(decrypted_text)

return result def main():

input_file_path = r"C:\humor.txt".strip()

if not os.path.exists(input_file_path):

30

print(f"Файл {input_file_path} не найден")

print(f"Чтение файла: {input_file_path}")

try:

print("\n===Ввод параметров аффинного шифра===")

n = int(input("Введите количество символов в алфавите (N): ")) a = int(input("Введите число a: "))

b = int(input("Введите число b: "))

decrypted_content = decrypt_affine(input_file_path, n, a, b)

if decrypted_content: print("\n===РЕЗУЛЬТАТ РАСШИФРОВКИ===")

print(decrypted_content)

except ValueError as ve: print(f"Ошибка ввода данных: {ve}")

except Exception as e: print(f"Ошибка: {e}")

if __name__ == '__main__': main()

31

Приложение В

(обязательное)

Исходный текст для криптоанализа шифра Виженера

махфюъббуъкхврбйтврхфьрчфшъвсхчнпкяшшкйрхьрьръьдеэтуоуайрушьпюме

ейянаикщмеъшыржмпаудюышврлтхпеычодкачнмезььоуапрртчказсешщоуьчо

мувшюрсзпюпкытрузхьускамйчмтпхжфатехйытрэкбтщхввецддяъцгаымттктч

цлиюъьжфюсьдшяъужпюмцсувшъхшяъноуьпякрбчуитюпштуипрртроьтуупеф

увйыхррыкфшфксжкюоцпуъшъзхжкщпефоутктжнонрхкжкскювттчосхрмщзт

штяфеатыпуушсрхюоомувшюэопчцмууоопктттзрэшьмувшюрсвкшщебььеххс

цнйххьсхютячуфтщрзъкыхтяъоййэтшвпюььтащхмжншцупшоьюрлфпяфзюцгр

чпмсншстызйгвцууччоачзььртэпцйсхъцоубьотэхмццрхпъвзрмцнуэкъзсдтявнб

къриюбунутпезцвможетпсрпрчбпйюлюврбйнпеъшызыфшяфеатыпуушсрхюоо

хсюънейхфьейрььинытцуфакрндытлфувщювмфчцмсютэткффцртшчомечкщкт

рцпнгбьцтуфшрроюлйщещъойзбььнквцйжуырыэжлхцуустювчмынпеяъоййэп

яфзютэрзвшюбчмоюхифъбешбхьдефъудтхуъхйашяфньшцсххошкфатпэршым

жешсмитляштехмсжкжмуфшвшючнфпцртшньдуатщктрббиуьйхэпхтщкэмфом

ухььдххцнуфгыабтрэекршыкпеапекгушщхжюнщвмляюэжрфьдцуштвсшцьбх

юоыбхрыяздыкяюфюырзчгшпькфтыбршчоучхщутбытжюцхцултлпьгхпойкхш

ьбврлыъэцыфьфуаеггаыощбфюыархючызиючусубьциньыстксчнчуыцобштттз

рътыецяшюфмртыжктпрънщсоутхруптлушктуыэрхвыуеубьотнэчйондхмекак

ъкнищцндьттэсюмйонвъбгеьтэтнбьопдьтцоеыпыюпшццгшфьькиаэжзьэеъксю

ыакпрццбхрсщкьшхшнефлцыкэышккшмйкзххцщкбьрзтээмшкафьдбъшархюу

ызфюыъзрюфьутгькудтъуодьшчдмухнжмрщщхчрхрнестюктвпбйкэжшкъгхьщ

къчожзллункэчйончтъпкщыахлхувтуэььпеьтцжзгышвчэеъкпаежвсшщотныкы

вфлхкпаефюэрмйгжххмырцвжрдкзпюпкьыбохрфусхшсйдтюырзчшхцубдшыв

хштьмтркрпкспьмхгруптлурзпюмущтлццйзхствсшырзхъкщрхшшыдфашспнт

вцзйюышкфатеврюмпкрюцьткяшпннчшяфнюьтрхюнцдучмйъеыынзюхштктф

шрррмчьфеътштшвшччуыцэтнухнжктвцубпщьпдыбартрпсрзхъжктхъоуфюхь

инышяюпыктгнйпезхэеупефнюржшйрэцвээврштхсуфыызирщюкмакепаьтшри

32

вйъкишнопчбфьеувъбсефшюрирлйнеяэяфаэчьлтютырифкъпкзэткрюыкгшфьь

бцыежхтхнюрсъшусубфюкфлмопнхьомухшпэьэшцййрпаднбпщкырфянутэям

ечкаюуфчьеуьшуеуашткьрщьдкбтщкифпарзюфюзцвчьучпясрхюоойеъшщжут

ыадуфшюрирщьъррщьжшъхьпдэкэтдуыщхъбьотепыкхцыежвчмшайзгфцшеай

ззиюмсрхюоудкбпщюдэшруксещрчшяьфшвйруфюцыкръкшркэктдуапрткьйср

йртюзэшхефуьпяфтлпфкчххцоууэасхрстпуткаюхюртзцвмьсубмьзсгмттшуэык

ъяъцпдвшэтутшткчмщювмфчцщтлпрзьхъодсюхцфзрябукьпчпаешевиюмавпзь

ьбжашякряъцургвцдевжябняшяскитщдтшсъксюоьонъшрдуъчочпюььтаеньткы

ырзчьтърмрыйсеэчйчцэпсрсъкъзтэегучхчахйрнтзхрышвьшмоннбжывзхьюхзл

муупшходуътавзхъыейхцутырхцдчгышнуьырзьхчцкцюбцдэхцябзйпщксхртху

ъшыпаьтхвтрмуупрццжнъшрктэеуоуышарьътывйтпюбъяшямуыжшхдяъужзръ

цфкыжырнчэекръкюфшушюрйрцызжлхькмтпяфтючодкачнмеуоуучютажуьць

къаштучтпыпнъшрбхрыящнверврзььокэйбйтриакфатъхчфшяфевшепуактхээш

рзйммъврхчкмненьтуффочрхнупйлрцдшвоьниюкэрчюцббфхъуукъптктбьрзтээ

мдпшчсуфюъазсюгупшоэщкыгщюрэххяфаыжыробььтуэеюэтъкцдаипщдтгрыэ

оьчускапбнуъыавхлпшвхвеызфюорзрштхрпючыхлэшсрсэптрсрыужбьшсрфю

ыезчгчонктшчучюъьпкгхцшаяъьгнткщудбмуфзхъгпнщзавлэкркцрхывйгсшрог

хьщпюуужзрхцпкгщцтепыкдудъьпчючтрсрчосхюьцдфюоьлйпщьгршрубцыш

рпуюббфныындфхгуткэкыкмъшъмхлхущпхчугаышыкцэпфктътшпкьэрзррбут

кфкяфшяпызофшэррэпыпепрункччйоняшюхьэйъкусгуззяпевчыпыкксещртхы

шррмфьучакыпаьмтржрмьмдтщутзлпэрфрхрпутэмвтухцаеяъуийхчцщкушэрй

юлыриюцыззшоуфбэптрзюоцнубжямечкаюфющювзфпнгазэручтшрврбппбшт

пюзтэпчзцытпэмрцуфныяьфбюоыриюбунутпшвтрньтуфышкъгхцшееоокмрчо

дкбфцпеюфывъсэтзсюьштутпыпаэпъзэрхьгаакхжкачбфбяъцфхючбдэшыкмеая

окьэшъхйтпюпуьэъррюьшхдшыээчрхяфхряшрчюъйожлхьгдчкырчзкяфнбшпу

чтпыпаьмьуфюццпеэтноеюьевцвтхксэпъхзхбутшшчусхшмуфршмьлчшвцпкю

фбфаткръкщыавхлушктуыэрхвфьейррупеьшчучгфьфучмоннбжнсхшсывчмын

учаэякрюфьпьрьунбэшцгуэпянаикщпнъкшкъиксрзфмутбакясеечбнебжянутчь

уеькяржюуырцвъочсюуарчзкяхрхнябнсшржзхъырсяъьзсхщьбзшхябйюлюрйгв

33

ыриюмцжебьотнъмгвррьукйюцоътшяжнкякышеещьбцэтрикбььоьвшьптхцьлц

вкюкпэкезхвкщучшхьотрмьупюмьлйюгущпхфьфуаэмжкаронзаэшзцышрвйап

рпкушэтнтпаучттнртяъьдкыцупдтшядкйпыпшоырзьрццмуьчофшбчцйпшцэрч

юхшрсшышхйэшчржбьопутфьлйыйъзтплбжчюшфкрющюрэышумувшюрксе

щрчгьэррэшрнебьыэсешхбнэшъпкяштврхфбрчюбоеебььбррщюбръкхвпюььту

щщюкцвъькррыкушвэщвдбьотшифодцвкюктэшчърпщшззъшъпевпьышйкщвц

мыйтубьккдяшткзшхябчюцбщчюмьщеупызиюъцфуушыютрщюрчшмрзххчцш

ачкывзхвуптляьмуэъоуфюхоееыкяюцъкъюдэкшрчюъьлфюяьикзььфуыпфврю

мязуъъбиетвузсхчнотхчупхрмцнубжыззээжврюоьдкатнкзбпюжыхцьзцэшрвмр

фюврбйяфхрялфувыатееэякршмонувшефуакыюэхыбокышуеугчнфбшльщкьщ

юкцвкщютхпрерпойдеыынбзытдрцвкюкпрьуоцшхкпкхшырсхчнсшукщриыкх

втрчуоцышрпучкяфаытрпкяштднцчьучшкшрлрэфщкапящшаыъвъшмонеэкрр

цъмшртжпшртжшрбххвцньвшлфутшрукэпщкыюкцупгыырзлщьнтхчывдькяме

бьотнъчоснбкщщчючбитючуотюньсуфшфжевжосувшъокэйьфзхобфтрщювмф

чцмшъкхвзэкавжгъуфзюсщзцвшщвцуъбжущфыкиючрээххцйпюцывчлйязрш

щюктпхябхрыяоевъцдевжшпнутяткфтыкъьчусуякщкцмшъзхчтазрмчобйхцьпу

ыкатнпъуонутнктхшэкцгпъэоэпштуэшъкпючпзмгцыриюкювжркпжшыеонбек

хткфкшпнукшрчюъьлдфшякъяшюпктттзрэшьмувшюроьчьеецойурлвоннэктр

фатхпевжьфмлмйгаытызцытжмуьхуучэеъкцюцыроэтшфуэпхвиюмотнткщзцы

тезцвчьдутыуоввшъмтшночпюцывчххмждешзхюрхьубэпефуэпхжуашррквъуд

уцчьзуфчомутньтуфцькъяъужпюмъзтпщюкзххяфеаштвзэтчржлболеяшарсгйы

зйюхфзтсещпнзпъхшфтрндвжябдяшэтусшрвряшекчрьккзбфьткбньнутшчхэхх

ргуушъзхчфцлтхфюртюццмуэыьжкаропнхфьфуашсржлхьсушыактхшадхрьцф

кыжыэсфхннгсшсрьххьдкъкрййакррсгцукчтпюжущщоодвтхвчпчбдэхпябуцтт

втшптзобьррзрхьпеэпюдарфыкирмюхпрябунытрвррлууфюфьлцвмьмууооучръ

цптлпевцлщюржшхцрйшчывйжкаюзхъыхрбйяфеатшртяштрэххшгуыжжрсгъу

йтюцбъпрюбкнчмщзпюьахйрорвфыкзвцъкэаэючоонюоцптроунцрцрфуашчпе

ътыхрэкяфеаэгхнэкэтеттщудъорзхшщьоеэтрокэйхвцюльлслмйършмпзмыэып

шочьщбюныкзчкывзхвуптляьмтрясвцытьжнэсожхгнцоцшъцхцгяъэрпхябзтеж

34

ктхмхкхрйывщшнбтатщщвюряефутеяфхртрвршыкдзхъупнжецоеавцтуткщкс

шцьупатэхьшярэзхыьмнфшэрчющыэъдъьпчючьдфющуткгхшвсуоуехюцьййш

хцубфъбетроюхиръойзрхцпаяшэнуйктбсяшдзхъшрпаьоррхрцывпюььтаешсрт

мфццуэкюзотоюхияъудхргоннбжрсхшсювьэеусуфшпкдэппзцэегуучмуййшуну

рхоьдеысоузютъгкчцьнзэеъсхюмьжтшфьосхчнфуыфонншщцчеытнпктттзрэту

жнэшсрршаопкбхйъеычцзйшчьеубхьдетмутътмутътмутъяшштшвеъкмттщкцв

еъхрюбшвспсооквтщщчюхмжнбшрукеыархючяфкъкмфцпфъзцвэшрчюъьздтх

ннубжшвпсеврпгыьошытдкфхъухръшрпетпюънээрэцюфьеуешщоетаупчапсрх

юоопеешщокбььбррэяфххцщзтэкндтхльгкыкншкафьдбъшархгинтечхцщныпз

зцфшюришфьейрыърчапщпебэъзххбыэоътыецяшюфтрошнефлцыкьчошкафьд

тюцтдуапъзрмьуънытсррглйзнбфьтпшшамхлмобзчшюхфхбонбэеутдфеывйуъь

гнщчожирмопбоцутырхцйзхстэеушюрйбхьдтюъоучтшюкрбйррсакшзршвккма

птмеьтсвршчохршаочщючотннььфуашэкршыкжуучофбяъьшкбыцапюььтепэф

ззяшщйеыкршкафьдбэпъпуушекцыпыпахшэрмфкрънхщуткбьбснтсоучръцму

ьщьтууйьгкачбнцпбаржллюрцшьксубхужтшурйиыйтпежпюмутчйлйтшюржхъ

ыхрбйцдмфъьетгхъпкяшехйшхьубсэтфуэкяпкуэызубьонубжыкьмтгурхоьдйрр

уоушяяржбьрзтэегмууоооушнщвмрщюкзлфщкпжкюкзипъхзжпюмзшщьншьъ

омшпъоуцьшаткыбарщшнбтатщщвюряьжтрсожхгньлнббуйеоьртебфюэчюцщ

апхщуткффоцкфъьлфашэрзхоыкпрыщзйюцхвтшццбцяэяфныындфюохзсххкзз

япюзйшцобьшхгдубьхнутпззояъьшкбыцкпюььтепьускажрэмлмонегцупдгроу

шзкяфтшфцпктптрсюньржайтвсшчьдеытрзчетчупыпэктрщювзшхцубъшадка

ыакгтфоокэчьофюхбжуцоодэшыкузюпчрьхъужнпыахфшхывфхърхгбьбскэжш

хзшчарзюущзцвчцшабшяфкэфьнуфаомеякщрнэшсжебеэвррыкмеьпыпепфюрэ

ъкррмфэггаыыэзхвеъкувоодеыныкрмиясшбфэтуешткртцьньрчцкжюхкъктыуе

уьпыбчапррлшхьфузььпкбхйъеышяютшвьтуекефуэпррмьшфпусещршышркчм

чцоеыпчъкушэтнччоменяодуэжяжкыкщвцмщьщчшчудаэшяксюуахчтщуткфтх

всхъдврбмуфнпэянаикщмеъщщзюхьябзюооокэйяпуткэтусъонефъьибшльпузч

йзцюлйфнпчювзшхцубьчудцхцупбипцокэжжздушююпющьиеыпщрчюцефутч

ннтрфойшяъужпюмцбзшхябзътыецяшюфцвпыэпюхьжыръойуихцубшйювмыт

35

екршчьлмтэшфуэфцлзшссннтечеуышярпбмцткытрпкчкэпуяпюзйюцыробхьдт

юъоуфряыхрбйхвтрмуудгмцжкыбартряьишбжрржитюпущщуыкапърньнщвмр

цэткфыаврбььнжвшжпувмьттюсункэшсрфыкъзтшчохцхйыпуьнбгпрццгкапсхс

рыщбтшыароапшкьвшрэчхфонешсезхэшчгкчоыэнтщожеыкрдкъшрзьэечрпхк

ыфбьевкигъйдфыкзвъюлювмюмонняшщхпаэсхуучуптюньучюхпвуэтсрчюмцн

нбжярзхъжкчмыавхшчыэоюлюбйфъудтюыаюгяъудубяьжнтвцльххьдкзпямнщ

ъьжнюлюзьхчыэохньскапфкчмйркйххшвпючцуутпюъеытлфувшптдффомфюф

щртпхцубчпщзтюцбсррцупншщюкиюъжпдьтждаайщкзтштхиглшкдытдзмапщ

гкбюьтсхчыркбэззцвмьдубыужетвузьгькдцвшюртъпцкиакръкхчоузшъуннъыаз

трчцбсъшархюуэтньпжкзрхябиыэгрочхьдкйтчмрхфьфубшпзтэшякрмчьокэйэх

ирхьетхчыэобььнжяхоодтеюэзрхьубшспзмфчйртючурчсъоуаткщрчхчцфкяхор

чэпсртхтячуфтщруэшяхршхьннижювмаэжзтшпцусхъаюцвкюкпъшархлуэтнтп

щокэйяайрщьжеысывпфэтрьэтшхнвшайетпщпутэмокышткгьэхэпрщьдканщвс

хчндтхшэкцгпъэогроудтронцпмшвсхчккжюцупдюярвчшхяфхряэрйюлыриюфь

фуашъхнбщйфевжэрйыэырояъьучючудучцьитюзарчбьювъччомуьхцъбвпъмч

юлйдеымгррюоыэъяъьокцэамеецуийгсрзмфкъктхшфкйрчырнччудкфшъэъухб

гнэбарфюъьийрхцфуичьфзюъыркяхоодшсэхьшчйщчющюктшцонетыугдькянд

этяфахмьжаапшкфюйркршыктнвццщтюмхоеетрвдъъйнбпццфзръцрйшчркйъ

шархляъриъшсршуштпубмуучшыбоеакяушфшшрчъкхэзрхябзюыэтнэтъвчмтг

меърцдаеыбыкбьрдтшяпэрюбарчюшадуашыкувфюрчюмьфпрчммутхуфшзтго

аипчксгъодбхмянутшъртшмйерпоуннъкшпквчучузэнпкфшщикэмясуьтывчмш

ыкпаэфкршчожтрццсуюбуткфчьуефтщкцмчогкапсжуцттвршыкмууооксэкяснэ

ехвжхъбфцпюцешаерсрргочнгхуфеытржуыжэрчхбупноъумнбьотнъруучюцэтн

ухоуныцупдяшянкфшрвчмщюксхъбжхгнцчдгмцжкыбарйгоьщтшфшхйрьькцз

пхвтхщьжеыпшхфхъуонэкмфцпыщвфлчонеяэтдкъъйневеуфзръцднфтъруэттрл

шооннбжывцбшяфеатшрсьпфжшвпъучръцмтрщцуеычожуйпемкзььржайтпкю

лгрйшцьйетпюънвжомууообтхщьъктпщкрбйцйзыпшкмбфщвйюфьжкцойпеит

язсхуыэкапщкпттцскаыазтмыэзьрьшрошбоуаъкшгаэкэрсшчобсэпхвьхцнййхы

кмхлхофахьрвхшмызчхъэзтштдвхрщоннъшсфдьтщкэруыкпэкшвсэйгучръцмц

36

гонсутыуошвшфзчюъьсныынрйэкцйчткюзояшэбчшхоубъмьжкючэрзхъыхрбй

шпкщбаржлшяфеэшркчмшаткчфьеуфмцикэтнмеяижртбхуфкыэызиюысррюмй

взюышрзрйъвцъкямхлмодэрйщкыюээвррчогкапскдсъьуныындфюохзсээмткъэ

ыэхээщдиэтщрцвчйзнбщювлэпыкдчпънняъуийхбуосютцучювыэктшэннбшхде

ытывжхъуечхяшфуэкязрпхызйакэнеэпаэзсшщютшауотхъоуцъкхвршбарсхчнпе

ихцпеакяузхьудирмопнътыецяшюфепаусрпхябмроутктйыпащлюхцшлйнкфмо

интщьдцхуркйшцьучшмазсэшаздблцнцпыэхчшырзхээщпеакхдныфупктьбучю

ъьпшшээврбшптаткроуапъпкэпезиюлйнутшхтечтаюъюьнбмэкщщчюмювьшш

жкжриаудяшарсьпыбфхъудкытрмршчцмшбмнфущцотншмотпепъзифпбчуфсо

гуыжыэсшлйнргбжзчрцьътшпртезтьфршбоннбжжкхюььлзчнщбйюмьпнфкфзх

рстржлхцжрпцупднфхзсяхнттхфюртюццмуэкцйжшлщкувпшксхыапуушбпнтп

юунвпавдяъьщкыштпшуходшшсожхюронувыатеекцгузтаврхпыззяпюдахйркй

ххлфшъчцешакыюэхксжкюььоргбжзмрлйфбьпыбфапянкфшрвршфьъсръйдпю

ььтаесрхьрхцшнвкаэнччумхючьонъшывдэпяокотгсутььтнвжызчээювмтпефую

оцпувъйдуънщхжшчцпуушъкхрщцъквлуйшьчйлеакппкшсъзхшькдмюъьонебб

жкбкэрнбьцпкфтшрзшчыэнтчбъеоьаткяпасхюфщбчрсуорпнтзсхъадахшфкзриа

кусъуфеоьазррсьнхрсбопюььтащхцъкэщюкцвкыкюртхетюйррцбьозчюцутмшь

унбэкнинччкехглйзцвпюддвчцмнвпюйеоьузнакхжшткмфцпбаржлщьерюьцфб

тсуотляызйакгсхюъйфафхцптлпгрйльрвхшъьийхчыэкяшщйевжывшзтщкцмлу

еевж

37

Приложение Г

(обязательное)

Код программы для нахождения длины ключа шифра Виженера

import collections import sys

FILE_PATH = r"C:\etext3.txt"

MAX_KEY_LENGTH = 10

ALPHABET_STR = "абвгдежзийклмнопрстуфхцчшщъыьэюя"

ALPHABET_SET = set(ALPHABET_STR)

RU_IC_TARGET = 0.0553

def clean_text(text: str) -> str:

return "".join([ch.lower() for ch in text if ch.lower() in ALPHABET_SET])

def calculate_ic(text: str) -> float: n = len(text)

if n < 2: return 0.0

counter = collections.Counter(text)

numerator = sum(count * (count - 1) for count in counter.values()) denominator = n * (n - 1)

return numerator / denominator

def find_best_key_length(ciphertext: str, max_len: int) -> int: results = []

print(f"\nДлины ключа от 1 до {max_len}...") print(f"{'Длина':<6} | {'Средний IC':<10} | {'Отклонение':<10} |

{'Вероятность'}") print("-" * 50)

best_length = 1 min_diff = float('inf')

for key_len in range(1, max_len + 1): columns = [""] * key_len

38

for i, char in enumerate(ciphertext): columns[i % key_len] += char

total_ic = 0.0 valid_columns = 0

for col in columns: if len(col) > 1:

total_ic += calculate_ic(col) valid_columns += 1

if valid_columns == 0: avg_ic = 0.0

else:

avg_ic = total_ic / valid_columns

diff = abs(avg_ic - RU_IC_TARGET)

if diff < 0.005:

status = "ОЧЕНЬ ВЫСОКАЯ" elif diff < 0.015:

status = "Высокая" elif diff < 0.025:

status = "Средняя" else:

status = "Низкая"

print(f"{key_len:<6} | {avg_ic:<10.4f} | {diff:<10.4f} | {status}")

if diff < min_diff: min_diff = diff best_length = key_len

return best_length

def main():

print(f"Чтение файла: {FILE_PATH}") raw_text = ""

try:

enc = 'utf-8' loaded = False try:

39

with open(FILE_PATH, "r", encoding=enc) as f: raw_text = f.read()

loaded = True

except UnicodeDecodeError:

print("Ошибка: Не удалось прочитать файл.") sys.exit(1)

except FileNotFoundError:

print(f"Ошибка: Файл не найден по пути {FILE_PATH}") sys.exit(1)

except Exception as e: print(f"Произошла ошибка: {e}") sys.exit(1)

ciphertext = clean_text(raw_text)

print(f"Длина текста: {len(ciphertext)} символов.") print(f"IC для русского языка: {RU_IC_TARGET:.4f}") print(f"IC для зашифрованного текста: ~0.038")

best_len = find_best_key_length(ciphertext, MAX_KEY_LENGTH)

print("\n" + "="*50)

print(f"Длина ключа = {best_len}") print("="*50)

return best_len

if __name__ == "__main__": main()

40

Приложение Д

(обязательное)

Код программы для криптоанализа шифра Виженера

import collections import sys

FILE_PATH = r"C:\etext3.txt"

KEY_LENGTH = 5

ALPHABET_STR = "абвгдежзийклмнопрстуфхцчшщъыьэюя"

ALPHABET = list(ALPHABET_STR)

N = len(ALPHABET)

CHAR_TO_INDEX = {char: i for i, char in enumerate(ALPHABET)}

RU_FREQ = {

'о': 0.11, 'е': 0.08, 'а': 0.08, 'и': 0.07, 'н': 0.07, 'т': 0.06, 'с': 0.05, 'р': 0.05, 'в': 0.05, 'л': 0.04,

'к': 0.04, 'м': 0.03, 'п': 0.03, 'у': 0.03, 'д': 0.03, 'я': 0.02, 'ы': 0.02, 'з': 0.02, 'ь': 0.02, 'г': 0.02,

'ч': 0.01, 'й': 0.01, 'х': 0.01, 'ж': 0.01, 'ю': 0.01, 'ц': 0.005, 'щ': 0.005, 'э': 0.005, 'ф': 0.005, 'ъ': 0.005, 'б': 0.02, 'ш': 0.01

}

def analyze_column(column_chars): if not column_chars:

return 'а'

counter = collections.Counter(column_chars) total_chars = len(column_chars)

best_shift = 0 best_score = -1.0

for shift in range(N): score = 0.0

for char, count in counter.items(): c_idx = CHAR_TO_INDEX[char] p_idx = (c_idx - shift) % N decrypted_char = ALPHABET[p_idx]

41

freq = count / total_chars

expected_freq = RU_FREQ.get(decrypted_char, 0.0) score += freq * expected_freq

if score > best_score: best_score = score best_shift = shift

return ALPHABET[best_shift]

def find_key(ciphertext, key_length):

if len(ciphertext) == 0:

print("ОШИБКА: В файле не найдено русских букв.") sys.exit(1)

print(f"Длина очищенного текста: {len(ciphertext)} символов.")

columns = [[] for _ in range(key_length)] for i, char in enumerate(ciphertext):

columns[i % key_length].append(char)

key = ""

print("Подбор ключа...") for i in range(key_length):

k_char = analyze_column(columns[i]) key += k_char

print(f" Позиция {i}: буква '{k_char}'")

return key

def vigenere_decrypt(ciphertext, key): plaintext = []

key_len = len(key)

for i, char in enumerate(ciphertext): k_char = key[i % key_len]

c_idx = CHAR_TO_INDEX[char] k_idx = CHAR_TO_INDEX[k_char] p_idx = (c_idx - k_idx) % N

plaintext.append(ALPHABET[p_idx])

42

return "".join(plaintext)

if __name__ == "__main__": print(f"Чтение файла: {FILE_PATH}")

ciphertext = "" try:

enc = 'utf-8' loaded = False

try:

with open(FILE_PATH, "r", encoding=enc) as f: ciphertext = f.read()

loaded = True

except UnicodeDecodeError: if not loaded:

print("Ошибка: Не удалось прочитать файл ни в одной из поддерживаемых кодировок.")

sys.exit(1)

except FileNotFoundError:

print(f"Ошибка: Файл не найден по пути {FILE_PATH}") sys.exit(1)

except Exception as e: print(f"Произошла ошибка: {e}") sys.exit(1)

if len(ciphertext) < 10:

print("Ошибка: Файл слишком короткий или пуст.") sys.exit(1)

found_key = find_key(ciphertext, KEY_LENGTH)

print("\n" + "="*40)

print(f"НАЙДЕННОЕ КОДОВОЕ СЛОВО: {found_key}") print("="*40 + "\n")

decrypted_text = vigenere_decrypt(ciphertext, found_key)

print("--- Расшифрованный текст (первые 500 символов) ---") print(decrypted_text[:500])

43