Шифр Виженера – это метод многоалфавитной подстановки, в котором используется ключевое слово, задающее последовательность сдвигов.
3. Каждая буква текста сдвигается на значение соответствующей буквы ключа по модулю 33:
Системный администратор издательства «Книжный мир» обнаружил странное вложение в письме с утверждением к печати рассказа одного из известных писателей. Ранее в Интернет выложили копию базы данных издательства с конфиденциальными данными, однако пароль от базы данных не был опубликован.
Вам необходимо подтвердить факт компрометации пароля от базы данных. Системный администратор предложил несколько ключей для расшифровки сообщения:
В качестве ответа предоставьте пароль от базы данных в зашифрованном сообщении.
Быстрее всего написать программу и перебрать ключи.
Имеется зашифрованное сообщение, 5 вариантов ключей. Судя по названию задания это шифр Виженера. Согласно ему – каждая буква текста заменяется на другую букву, сдвинутую на количество позиций в алфавите, определяемое соответствующей буквой ключевого слова.
Соответственно, можно написать программную реализацию этого шифра.
def vigenere_decrypt(ciphertext, key, alphabet="абвгдеёжзийклмнопрстуфхцчшщъыьэюя"):
"""Дешифрование шифра Виженера"""
decrypted = []
for i in range(len(ciphertext)):
letter = ciphertext[i]
if letter in alphabet:
letter_num = alphabet.index(letter)
key_letter = key[i % len(key)]
key_num = alphabet.index(key_letter)
new_num = (letter_num - key_num) % len(alphabet)
decrypted.append(alphabet[new_num])
else:
decrypted.append(letter)
return ''.join(decrypted)
# Зашифрованный текст (вставь свой)
ciphertext = "ГЯЛХЧЪЮДФЙМБРЫЭЦНЫКЭАЦИАПТОПШЙЭУЬЮЙТВВЕУМЫФАБШЧЕЛСГЩЫБЖШЁЁТПБЩНЩМЦВГЖБНЭШЮИЮЛЬ
ЬЬЬПЫЫПГИККЬЯШЙШЕХПХЖОСАЭУДПКЯЪУАХЬРЮХЖЫСАВУЕВЬСФЕШЭИЪЫШРУТОАВЬУЫЮГЕШЦУЫПХЭЭКМЕ
ЕБОСАВУЕШИЫФХЭОЧЪКИЬЩЩЬЦЮШАЪЩФЧУШНПШЧШШЦИЕЫЪПЩТЩЬАЛЬЁЪУККХЫПЮЛЫЕЦЕБЖСУНЕЕКЩСАРШ
АЩУЬЭФЭТМПФДЭФЫНЬЯЭЬССЮЯЪУМТЭЬВЪЧЩЭОККХЬЧУИПШЮШИДЁЦБВХЖЦЦИЭУЩЫНРЯШЙВИЫКЭБЪЬЯВВВ
УЫЮШЧОКЫЙСЬКЙРТЩГИПУЮПЕЁЁЮЕАШЬЩТЦЧХЖОКИЕВЬЙЫМББУАСЯЭЬЕУММУПГКСГЬВИЬУЬЩЁШЧУЬАВДП
КЦЖАБЧЧГЮЧЖЧШЩФБЧПЫРАВАШЧРЮЙШЫЗАПАЪЩЙЩПЮШАШТАШЬШИЮЮЧЖЧАТАШАЦНЯПКЭЫНХЬВИЙУЬЫЧЛШЦ
ТБШКЛЧРПЁУЫЗПВШЕШСДФЁШЧЯНАШЪШИАГЪБЭИОГДУФКЬЫЮЭФКТАБЖЬФБЦЬКЭИЪБЁЛЪИЯРУЩЩЖМТВВУМТ
ВФИПМТВЕШЧИЯЮФЖФЫНЬЙШЫЕШПМЭФЦНУЫДКЫЬЬКШАЦТВЁШЧЩББЕГУТСГИККХЮГЕФИШНЕБЭЭСАПАЧЛДЩШ
АЭОЗЭШЯЛЧЧЮОХБОНЩУЖЩТНЩФБУФШЬУББЧЪЦУШДУУЬВЖППЦИЩЕЪЩСЪЭШЙХИХЪЬЫЩКЬАЬДЩМЫГТЗЩХЫНЕ
ГКРШГШКЮШЬСШЬКЖАФГЭЫЕМБХЭЭЬСФЯШОИПЭВЕУЦБСЛБАМЫФЭЗЫНСПБФЙЪАПДБШДРЫЖЩЩУЬЩХКЩФЭФАЖ
НЬЕШИЙЁЦЬСШВЬМЮГЫФЙХЦСЦИУМЫШЙЭМДЯЮЮЖФКЩПЧБЧСЮБВДШЯТЯЬИЩКНЫАЭШЕЁГСЬЩАЙЮБЪЁМНСУДТ
ИШЭТАЙЮЮПФИЩЛЬАЖЙЦИЫПЬЕПМЦЧЁЧСУЬТВЙЭИШПБШТИЦЕЫЬЩЩЬСПЭМДЭШХШЦЦТБЮЖЫЧТЫЬЗЫНСЪЬЁКБ
ЦЭШЙХЧЮЮЧЪУЛНЫЬЙЖУЮГЦЖЧУЬСЛБЬНЮФФИЙЦИФКШГСЯЪЬЗЙВЦЬГБМЧЪШХБШЧЪЮББМНЯФЯФПКЯФДЬБНЩ
ШЯБГСЭФЯШЪНЫПЮИКЗЪШИЪКПЫЖУРШСШШБЖЬСЩШЬЁУРШЮЮДКЦМЫЬЙЖЛЬБЁЧЧШЮЮШГЭСХЬШЁУЫЙЪЯЦВСШМ
ЁЖНЧЁШЗИКЪЩШЯБЬЕЮФКБМББЬБЭМЦМВБУФПБЦЪБЭЛЬБЁЭФКТБШДЁТШАЖЫШЧПУДЛНЩНЧЧШЦЪМТЯШЬШЮШТ
КШДЧШЫЪЩЦШШИЫЮЪЩФЭЩПЛЩКЭАМЬШСЕЭЬХЬЫЮДУЪЩГЛШИЫОПТЁКСЯЫУЪУЫЯЫУЬЩЪЯВБУФШТСШОЦЖСЬЬД
ЮШЮФЯЭЬЫЦАЖЙЦИЫПЬДПФТЬЕЪУЫИЩЬЕМНЫФЙЁЩЪААУЙЭЕЛЯОДХЧЧГЁЖЧФТЭБУФЦТФЕКШНЭЛШКЫЬЯЫУЁМ
ФЛРЯЭШЦИЩГШЫЧЩЛВКЛИХКЧШШЦИЕЕКУЮЬВХЖЫНЫШШЁКМЮГЦШЧСЩЮЦЖНФМУЬКМРСКИШПЫЯФДЬУЫЯОЦЖЫС
АИЬЗЦЗББВКШНАФДЗПЦЙОЕПУЫНФЁГКПСКШЕНЦЬСШЁЖЗПГБУШЕЦБГШЬХБАБУЧАТЫВЕТИЁГАЁЁХЯСУЬПЙЫ
КАЙЭЧЩЮАЙУММВЁИУКЦВТАЙХЩПЧУПЙТЧАЖЦКЫКЫШХЧПЗВЕЪЬЯВОЕЪИХКФБЦСШГФГУУЮГЦЖМДТШФИКЦЁП
БЭЪЩЦОЁЁЁХЦЭБЭЬФИЗУКМНЖФЦЖЛИМЭУЗЩЫБЯЬДУЪЪГМЭШЦИЩХАНФМУЁЖЭЩЦБВЗПЩЫШЮШЫЬЯЫУЁККСГЛ
ЭШНЯЖУЙЭЦИФЁШЙЫЩНФЪУСЫФБШМСЯВЬЧОЧСШБИЩЛСПЭЪЩСАФЯФЬХТЫОВЧНЕЮАИКРССЬЁЮКЁШЭЗЫНСФЯУ
ЛЧРПЁУАУЦФХЙХСГЯВДПТСАЖЫЩТВПДДКЭШАЬГЮЦЫПЧЕПЦЫКЭЪЪСЮПИЁУУТЬБЭЪЧОФЪЬПЦЫКЭЁЩКЬШБЙХ
ЩЬЬБУФЪЮФЧФЧНЕФЭЗЩЪЩФЧЁУТЭЮЯЁЁТЯВДШЬЫЫЮЭЬЮХИЬЯШОЧЧЕУАКЩЯЪЬВАИЫАУКЧСЮКХЙПЫЮЮШЩЦН
СЭОБЮЛЮНАУУШЦАХЭЬНЩКЭБЧЦТСГБЫ"
# 5 ключей
keys = [
"ПУШКИН",
"ТЮТЧЕВ",
"ЕСЕНИН",
"МАРШАК",
"ОГАРЁВ"
]
alphabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
print("Расшифровка для 5 ключей:\n")
print("=" * 60)
for i, key in enumerate(keys, 1):
decrypted = vigenere_decrypt(ciphertext, key, alphabet)
print(f"\nКлюч {i}: '{key}'")
print("-" * 40)
print("Полный результат:")
print("-" * 40)
print(decrypted)
print("=" * 60)
print("\nВсего вариантов: 5")
Осмысленный текст у нас получился только при ключе – ПУШКИН.
УЛУКОМОРЬЯДУБЗЕЛЕНЫЙЗЛАТАЯЦЕПЬНАДУБЕТОМИДНЕМИНОЧЬЮКОТУЧЕНЫЙВСЁХОДИТПОЦЕПИКРУГОМ
ИДЕТНАПРАВОПЕСНЬЗАВОДИТНАЛЕВСКАЗКУГОВОРИТТАМЧУДЕСАТАМЛЕШИЙБРОДИТРУСАЛКНАВЕТВЯХС
ИДИТТАМНАНЕВЕДОМЫХДОРОЖКАХСЛЕДЫНЕВИДАННЫХЗВЕРЕЙИЗБУШКАТАМНАКУРЬИХНОЖКАХСТОИТБЕЗ
ОКОНБЕЗДВЕРЕЙТАМЛЕСИДОЛВИДЕНИЙПОЛНЫТАМОЗАРЕПРИХЛЫНУТВОЛНЫНАБРЕГПЕСЧАНЫЙИПУСТОЙИ
ТРИДЦАТЬВИТЯЗЕЙПРЕКРАСНЫХЧРЕДОЙИЗВОДВЫХОДЯТЯСНЫХИСНИМИДЯДЬКАИХМОРСКОЙТАМКОРОЛЕВ
ИЧМИМОХОДОМПЛЕНЯЕТГРОЗНОГОЦАРЯТАМВОБЛАКАХПЕРЕДНАРОДОМЧЕРЕЗЛЕСАЧЕРЕЗМОРЯКОЛДУННЕ
СЕТБОГАТЫРЯВТЕМНИЦЕТАМЦАРЕВНАТУЖИТАБУРЫЙВОЛКЕЙВЕРНОСЛУЖИТТАМСТУПАСБАБОЮЯГОЙИДЕТ
БРЕДЕТСАМАСОБОЙТАМЦАРЬКАЩЕЙНАДЗЛАТОМЧАХНЕТТАМРУССКИЙДУХТАМРУСЬЮПАХНЕТИТАМЯБЫЛИМ
ЕДЯПИЛУМОРЯВИДЕЛДУБЗЕЛЕНЫЙПОДНИМСИДЕЛИКОТУЧЕНЫЙСВОИМНЕСКАЗКИГОВОРИЛОДНУЯПОМНЮСК
АЗКУЕТУПОВЕДАЮТЕПЕРЬЯСВЕТУДЕЛАДАВНОМИНУВШИХДНЕЙПРЕДАНЬЯСТАРИНЫГЛУБОКОЙВТОЛПЕМОГ
УЧИХСЫНОВЕЙСДРУЗЬЯМИВГРИДНИЦЕВЫСОКОЙВЛАДИМИРСОЛНЦЕПИРОВАЛМЕНЬШУЮДОЧЬОНВЫДАВАЛЗА
КНЯЗЯХРАБРОГОРУСЛАНАИМЕДИЗТЯЖКОГОСТАКАНАЗАИХЗДОРОВЬЕВЫПИВАЛНЕСКОРОЕЛИПРЕДКИНАШИ
НЕСКОРОДВИГАЛИСЬКРУГОМКОВШИСЕРЕБРЯНЫЕЧАШИСКИПЯЩИМПИВОМИВИНОМОНИВЕСЕЛЬЕВСЕРДЦЕЛИ
ЛИШИПЕЛАПЕНАКРАЯМИХВАЖНЧАШНИКИНОСИЛИИНИЗКОКЛАНЯЛИСЬГОСТЯМПРОЕКТИЗМЕНИТЬКЛЮЧИКЭТ
ОГОШИФРАСЛИЛИСЬРЕЧИВШУМНЕВНЯТНЫЙЖУЖЖИТГОСТЕЙВЕСЕЛЫЙКРУГНОВДРУГРАЗДАЛСЯГЛАСПРИЯТ
НЫЙИЗВОНКИХГУСЛЕЙБЕГЛЫЙЗВУКВСЕСМОЛКЛИСЛУШАЮТБАЯНАИСЛАВИТСЛАДОССТНЫЙПЕВЕЦЛЮДМИЛУ
ПРЕЛЕСТИРУСЛАНАИЛЕЛЕМСВИТЫЙИМВЕНЕЦНОСТРАСТЬЮПЫЛКОЙУТОМЛЕННЫЙНЕЕСТНЕПЬЕТРУСЛАНВЛ
ЮБЛЕННЫЙПАРОЛЬОТБАЗЫДАННЫХСТИХОТВОРЕНИЕНАДРУГАМИЛОГОГЛЯДИТВЗДЫХАЕТСЕРДИТСЯГОРИТ
ЩИПЛЯУСОТНЕТЕРПЕНЬЯСЧИТАЕТКАЖДЫЕМГНОВЕНЬЯВУНЫНЬИСПАСМУРНЫМЧЕЛОМЗАШУМНЫМСВАДЕБНЫ
МСТОЛОМСИДЯТТРИВИТЯЗЯМЛАДЫЕБЕЗМОЛВНЫЗАКОВШОМПУСТЫМПАЗЫБИЛИКУБКИКРУГОВЫЕИБРАНШАН
ЕПРИЯТНЫМИННЕСЛЫШАТВЕЩЕГОБАЯНАПОТУПИЛИСМУЩЕННЫЙВЗГЛЯДТОТРИСОПЕРНИКАРУСЛАНАВДУШЕ
НЕСЧАСТНЫЕТАЯТЛЮБВИИНЕНАВИСТИЯДОДИНРОГДАЙВОИТЕЛЬСМЕЛЫЙМЕЧОМРАЗДВИНУВШИЙПРЕДЕЛЫБ
ОГАТЫХКИЕВСКИХПОЛЕЙДРУГОЙФАРЛАФКРИКУННАДМЕННЫЙВПИРАХНИКЕМНЕПОБЕЖДЕННЫЙНОВОИНСКР
ОМНЫЙСРЕДЬМЕЧЕЙПОСЛЕДНИЙПОЛНЫЙСТРАСТНОЙДУМЫМЛАДОЙХАЗАРСКИЙХАНРАТМИРЫВСЕТРОЕБЛЕД
НЫИУГРЮМЫИПИРВЕСЕЛЫЙИМНЕВПИР