49 lines
4.6 KiB
Python
49 lines
4.6 KiB
Python
|
from operator import itemgetter
|
|||
|
|
|||
|
|
|||
|
def caesar_cipher(alphabet: str, key: int, message: str) -> str:
|
|||
|
new_message = ""
|
|||
|
for char in message:
|
|||
|
is_upper = char.isupper()
|
|||
|
char = char.lower()
|
|||
|
|
|||
|
if char not in alphabet:
|
|||
|
new_message += char
|
|||
|
continue
|
|||
|
|
|||
|
index_of_new_char = (alphabet.find(char) + key) % len(alphabet)
|
|||
|
new_char = alphabet[index_of_new_char]
|
|||
|
new_message += new_char.upper() if is_upper else new_char
|
|||
|
|
|||
|
return new_message
|
|||
|
|
|||
|
|
|||
|
def hack(alphabet: str, delta: dict[str, float], message: str) -> int:
|
|||
|
delta_arr = []
|
|||
|
for key in delta.keys():
|
|||
|
for char in alphabet:
|
|||
|
shift = abs(alphabet.find(key) - alphabet.find(char))
|
|||
|
delta_arr.append((abs(delta[key] - message.count(char) / len(message)), shift))
|
|||
|
|
|||
|
return min(delta_arr, key=itemgetter(0))[1]
|
|||
|
|
|||
|
|
|||
|
def main() -> None:
|
|||
|
encrypted_message = "Елжзо фср, дцжхс Лсфлч Гознфзлъ е псзп жспз флжлх, л в угж съзря л йзогб зёс цёсфхлхя. Дцжхс в ф тсфхсусррлпл рзцпсоърс дсохгб л ежуцё ефтспрло, ъхс ахс зпц рз псйзх ругелхяфв, л йзогб н рзпц тулдолклхяфв л зёс сдрвхя. Рс хсоянс ъхс тулдолклофв, елйц, ъхс олщс зёс тузсдугклосфя, фхгос псосжсз, л ср прз хлшс, хлшс ъхс-хс ёсесулх лк цъзряв сужзрг, хгн хлшс, ъхс в рз псёц угффоюыгхя. Тсхсп дцжхс еюыол пю ефз лк нспргхю, л ъхс-хс хцх фоцълосфя пцжузрсз. Пю флжзол лол озйгол рг тсоц. Ср прз ъхс-хс ёсесуло. Г прз дцжхс кгшсхзосфя тснгкгхя зпц фесб ъцефхелхзоярсфхя, л в, рз ефоцылегвфя е зёс узъл, фхго фздз ессдугйгхя фсфхсврлз фесзёс ерцхузррзёс ъзосезнг л сфзрлеыцб пзрв плосфхя Дсйлб. Л тсвелолфя ц пзрв фозкю рг ёогкгш, л в дюо жсесозр, ъхс ср ахс тулпзхло. Рс ср екёоврцо рг пзрв ф жсфгжсм л ефнсъло, тузфзныл фесм угкёсесу. В сусдзо л фтусфло, рз нс прз ол фнгкгррсз схрсфлосфя; рс ср рлъзёс рз схезъго, тснгкго прз огфнсеюм елж, л тсфоз ежуцё съцхлолфя пю е фтгоярз псзм, ёжз фхслх жесмргв нусегхя. Ср озё рг рзз рг нугм, л в, дцжхс тюогв н рзпц йзогрлзп огфнгхяфв, тулозё хцх йз. Л ср дцжхс ц пзрв фтугылегзх: „Фнгйлхз тс тугежз, нгнсз ею лпззхз ёогерсз тулфхугфхлз? Цкргол ол ею зёс? В жцпгб, ъхс ею цйз зёс цкргол“. В, фпцхлеылфя флп естусфсп, схезъго, ъхс озря псз ёогерсз тулфхугфхлз. Ср рзжсезуълес тснгъго ёсосесм. Л в, зьз дсозз фпцхлеылфя, схезъго, ъхс в шсхв л йлец ф йзрсб, тс зёс фсезхц, рс рз нгн пцй йзрю фесзм. Рг ахс ср ескугкло, ъхс рз жсойрс йзрц олыгхя фесзм огфнл, жго ъцефхесегхя, ъхс е ахсп дюог псв сдвкгррсфхя. Рс в схезъго, ъхс в фхюйцфя ахсёс; л ежуцё ефз фснуюосфя. Л в тусфрцофв л ргызо е пюфовш феслш хзнфх фе. Тлфгрлв: Йлесх дз фезх ъзосезнсп, г фезх ес хяпз фезхлх л хяпг зёс рз сдэвх. Олщс ц Лсфлчг Гознфззелъг дюос псосйгесз л фезхосз. Е ахсх жзря тсоцъло тлфяпс сх догёсжзхзов, е нсхсусп ср тлызх сд сдвкгррсфхл фцтуцйзфхег»."
|
|||
|
alphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
|
|||
|
delta = {
|
|||
|
"о": 0.10983,
|
|||
|
"е": 0.08483,
|
|||
|
"а": 0.07998,
|
|||
|
}
|
|||
|
|
|||
|
key = hack(alphabet, delta, encrypted_message)
|
|||
|
print("Key:", key)
|
|||
|
|
|||
|
decrypted_message = caesar_cipher(alphabet, -key, encrypted_message)
|
|||
|
print("Decrypted message:", decrypted_message)
|
|||
|
|
|||
|
|
|||
|
if __name__ == "__main__":
|
|||
|
main()
|