From 4fdbd0f2d80278cc87f7e167dd014cf9e24dd2ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD=20=D0=9F=D0=BB=D0=B5=D1=82?= =?UTF-8?q?=D0=BD=D0=B5=CC=88=D0=B2?= Date: Fri, 27 Dec 2019 09:07:09 +0300 Subject: [PATCH 1/3] init --- cesar.py | 29 +++++++++++++++++++++++++++++ viziner.py | 18 ++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 cesar.py create mode 100644 viziner.py diff --git a/cesar.py b/cesar.py new file mode 100644 index 0000000..5dfc94b --- /dev/null +++ b/cesar.py @@ -0,0 +1,29 @@ +def decrypt(word): + keys = {} + for letter in word: + keys[letter] = keys.get(letter, 0) + 1 + key = sorted(keys.items(), key=lambda x: x[1], reverse=True)[0] + return chr(ord(key[0]) - ord(" ")) + + +def encryption(word, key, decode=False): + ls = [] + for i in word: + if decode: + ls.append(chr((ord(i) - ord(key)) % 65536)) + else: + ls.append(chr(ord(i) + ord(key) % 65536)) + return "".join(ls) + + +if __name__ == '__main__': + + text = "I Love UNIX" + key = "I" + + encrypted_text = encryption(text, key) + decrypted_text = encryption(encrypted_text, key, decode=True) + + print(f"{text} -> «{encrypted_text}» -> {decrypted_text}") + + print(f"Подобранный ключ: {decrypt(encrypted_text)}") diff --git a/viziner.py b/viziner.py new file mode 100644 index 0000000..59c37d0 --- /dev/null +++ b/viziner.py @@ -0,0 +1,18 @@ +def decode_encode(text, key): #XOR + ls = [] + for a in range(len(text)): + for i, j in [(text[a], key[a])]: + ls.append(ord(i) ^ ord(j)) + return "".join(map(chr, ls)) + + +text = "Hello world" +key = "jgqwertagsh" +enc = decode_encode(text, key) + +for i in enc: + print(f"|{i}|") +dec = decode_encode(enc, key) +print(enc, dec) + + From 294180616b5496938a3e7859bd986135c11ea260 Mon Sep 17 00:00:00 2001 From: "wed.addams" Date: Fri, 12 Nov 2021 16:41:29 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D1=84=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecryption.py | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++-- viziner.py | 18 --------------- 2 files changed, 63 insertions(+), 20 deletions(-) delete mode 100644 viziner.py diff --git a/ecryption.py b/ecryption.py index bfc3f5c..3a5de5d 100644 --- a/ecryption.py +++ b/ecryption.py @@ -1,4 +1,65 @@ +from collections import Counter + +# максимум для chr +mx = 65536 + + +# зашифровка методом цезаря def encrypt(k, m): - return ''.join(map(chr, [x + k for x in map(ord, m)])) + return ''.join(map(chr, [(x + k) % mx for x in map(ord, m)])) + + +# расшифровка методом цезаря +def decrypt(k, c): + return ''.join(map(chr, [(x - k) % mx for x in map(ord, c)])) + + +# разница в + и - чтобы добавить ключ в зашифровке и вычесть в расшифровке + +# поиск чаще всего встречающегося элемента(зашифрованного пробела) и дешифровка +def decrypt_unknown(m): + most = Counter(m).most_common()[0][0] + # print(most) + key = ord(most) - ord(' ') + return decrypt(key, m) + + +# "размножение" ключа и xor в шифровании +def encrypt_(k, m): + k = k * (len(m) // len(k)) + k[:(len(m) % len(k))] + return ''.join(map(chr, [i ^ x for i, x in zip(map(ord, m), map(ord, k))])) + + +# дешифровка +def decrypt_(k, c): + return encrypt_(k, c) + + +# сегмент проверки +a = encrypt(2, 'Окаери, докта! Мы ждали вашего возвращения. Как ваша память? Еще помните нас?') +b = encrypt(3, 'Окаери, докта! Мы ждали вашего возвращения.') + +c = decrypt_unknown(a) +d = decrypt_unknown(b) + +print('Работающая зашифровка зная ключ') +print(a, '\n') + +print('Работающая дешифровка зная ключ') +print(decrypt(2, a), '\n') + +print('Работающая дешифровка не зная ключ') +print(c, '\n') + +print('Неработающая дешифровка не зная ключ потому что короткий текст') +print(d, '\n') + +key = '1, 4, 9' +e = encrypt_(key, c) +f = decrypt_(key, e) + +print('Работающая зашифровка Вернама') +print(e, '\n') -print(encrypt(2, 'Hello!')) \ No newline at end of file +print('Расшифрованный текст шифра Вернама:') +print(f, '\n') diff --git a/viziner.py b/viziner.py deleted file mode 100644 index 59c37d0..0000000 --- a/viziner.py +++ /dev/null @@ -1,18 +0,0 @@ -def decode_encode(text, key): #XOR - ls = [] - for a in range(len(text)): - for i, j in [(text[a], key[a])]: - ls.append(ord(i) ^ ord(j)) - return "".join(map(chr, ls)) - - -text = "Hello world" -key = "jgqwertagsh" -enc = decode_encode(text, key) - -for i in enc: - print(f"|{i}|") -dec = decode_encode(enc, key) -print(enc, dec) - - From e75524a8e34394ce69e8795182c8667b2ee833a8 Mon Sep 17 00:00:00 2001 From: "wed.addams" Date: Fri, 12 Nov 2021 16:42:53 +0300 Subject: [PATCH 3/3] final --- cesar.py | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 cesar.py diff --git a/cesar.py b/cesar.py deleted file mode 100644 index 5dfc94b..0000000 --- a/cesar.py +++ /dev/null @@ -1,29 +0,0 @@ -def decrypt(word): - keys = {} - for letter in word: - keys[letter] = keys.get(letter, 0) + 1 - key = sorted(keys.items(), key=lambda x: x[1], reverse=True)[0] - return chr(ord(key[0]) - ord(" ")) - - -def encryption(word, key, decode=False): - ls = [] - for i in word: - if decode: - ls.append(chr((ord(i) - ord(key)) % 65536)) - else: - ls.append(chr(ord(i) + ord(key) % 65536)) - return "".join(ls) - - -if __name__ == '__main__': - - text = "I Love UNIX" - key = "I" - - encrypted_text = encryption(text, key) - decrypted_text = encryption(encrypted_text, key, decode=True) - - print(f"{text} -> «{encrypted_text}» -> {decrypted_text}") - - print(f"Подобранный ключ: {decrypt(encrypted_text)}")