diff --git a/ecryption.py b/ecryption.py index bfc3f5c..a88fd0d 100644 --- a/ecryption.py +++ b/ecryption.py @@ -1,4 +1,63 @@ -def encrypt(k, m): - return ''.join(map(chr, [x + k for x in map(ord, m)])) - -print(encrypt(2, 'Hello!')) \ No newline at end of file +#!/usr/bin/env python +# coding: utf-8 + +# In[ ]: + + +from collections import Counter +from random import randint +N = 65536 + + +def encrypt_caesar(k, m): + offset_ords = [(x + k)%N for x in map(ord, m)] + return ''.join(map(chr, offset_ords)) + + +def decrypt_caesar(k, m): + offset_ords = [(x - k)%N for x in map(ord, m)] + return ''.join(map(chr, offset_ords)) + + +def hack(m): + most_common = Counter(m).most_common()[0][0] + key = ord(most_common) - ord(' ') + return decrypt_caesar(key, m) + + +# шифр вернама +def generate_key(length): + return [randint(0,26) for _ in range(length)] + +def xor(char, key): + return chr(ord(char)^key) + +def encrypt_v(text): + key = generate_key(len(text)) + return ''.join([xor(text[i], key[i]) for i in range(len(text))]), key + +def decrypt_v(cryptedtext, key): + return ''.join([xor(cryptedtext[i], key[i]) for i in range(len(cryptedtext))]) + +TEXT_TO_CHECK = 'The last words of the Roman dictator Julius Caesar are disputed.' +key = int(input('Введите ключ для Цезаря: ')) +text = encrypt_caesar(key, TEXT_TO_CHECK) +print('Зашифрованный текст Цезаря:', text) +print(' ') +print('Расшифрованный текст Цезаря:', decrypt_caesar(key, text)) +print(' ') +print('Взломанный текст Цезаря:', hack(text)) +print(' ') +encrypt_v, key = encrypt_v(TEXT_TO_CHECK) +print('Зашифрованный шифром Вернама текст: ', encrypt_v) +print(' ') +decrypt_v = decrypt_v(encrypt_v, key) +print('Расшифрованный текст: ', decrypt_v) +print(' ') + + +# In[ ]: + + + +