forked from fa-python-network/7_Symmetric_ciphers
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathecryption.py
69 lines (55 loc) · 2.23 KB
/
ecryption.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
"""
Реализовать одно алфавитный шифр Цезаря для шифрования и дешифрование
строки любой длины и заданным ключем(сдвигом алфавита),
используется кириллический алфавит, знаки препинания,
цифры, верхний и нижний регистр.
"""
GLOBAL_STR = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцшщъыьэюя0123456789 .,;...?:!()-|\"«»'"
class CesarClass:
def __init__(self, key, string):
out = ""
for char in string:
out += self.encrypter(char, key)
self.encrypted = out
s = ""
for char in out:
s += self.decrypter(char, key)
self.decrypted = s
def encrypter(self, char, k):
"""
Метод для шифрования данных по шифру Цезаря
"""
s = GLOBAL_STR
index = s.find(char)
# Если длина ключа больше самой строки
if k > len(s):
k = k - len(s)
if index + k >= len(s):
return s[index + k - len(s)]
else:
return s[index + k]
def decrypter(self, char, k):
"""
Метод для расшифровки данных по шифру Цезаря
"""
s = GLOBAL_STR
index = s.find(char)
# Если длина ключа больше самой строки
if k > len(s):
k = k - len(s)
if index - k >= len(s):
return s[index - k + len(s)]
else:
return s[index - k]
def main():
try:
k = int(input("Введите сдвиг K -> "))
s = str(input("Введите строку -> "))
except:
print("Что-то пошло не так при вводе данных")
return
obj = CesarClass(k, s)
print("Зашифрованный ключ: " + obj.encrypted)
print("Расшифрованный ключ: " + obj.decrypted)
if __name__ == "__main__":
main()