From 77567f4e99f7ae4557ddf520f9882e568f8a9b01 Mon Sep 17 00:00:00 2001 From: EvgenKi <93452186+EvgenKi@users.noreply.github.com> Date: Wed, 10 Nov 2021 23:54:24 +0200 Subject: [PATCH 1/5] Create README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..c42afec --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# kpi-python-course +Python course repository +Kiba Evgen From de7187ef0a1611c412d92242b3bce20815183414 Mon Sep 17 00:00:00 2001 From: EvgenKi <93452186+EvgenKi@users.noreply.github.com> Date: Thu, 11 Nov 2021 14:30:16 +0200 Subject: [PATCH 2/5] Add files via upload --- Kiba.docx | Bin 0 -> 19811 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Kiba.docx diff --git a/Kiba.docx b/Kiba.docx new file mode 100644 index 0000000000000000000000000000000000000000..085abbf2748f9f470b2ba21b738b773b03e90d08 GIT binary patch literal 19811 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 a Date: Tue, 23 Nov 2021 19:18:00 +0200 Subject: [PATCH 3/5] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=201-2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Я доделал лабораторную работу . Это енигма с контролем роторов завязаных на ключе --- Lab_Rab_0/Lab_Rab_0.sln | 23 ++++++ Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py | 111 +++++++++++++++++++++++++++ Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj | 35 +++++++++ 3 files changed, 169 insertions(+) create mode 100644 Lab_Rab_0/Lab_Rab_0.sln create mode 100644 Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py create mode 100644 Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj diff --git a/Lab_Rab_0/Lab_Rab_0.sln b/Lab_Rab_0/Lab_Rab_0.sln new file mode 100644 index 0000000..440ce2d --- /dev/null +++ b/Lab_Rab_0/Lab_Rab_0.sln @@ -0,0 +1,23 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31729.503 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "Lab_Rab_0", "Lab_Rab_0\Lab_Rab_0.pyproj", "{A5DB5168-E575-4710-AAED-CEF6C07B18D4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A5DB5168-E575-4710-AAED-CEF6C07B18D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5DB5168-E575-4710-AAED-CEF6C07B18D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1CA3E8D9-1FD0-43D5-9362-4D5E73D6E466} + EndGlobalSection +EndGlobal diff --git a/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py b/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py new file mode 100644 index 0000000..67b79ca --- /dev/null +++ b/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py @@ -0,0 +1,111 @@ +def Index(Index_cod,List_cod,Rotor_Dict): + Index_cod = [ + key + for el in List_cod + for key, value in Rotor_Dict.items() + if el == value +] + return Index_cod +def Rotor_norm(Index_cod,sum): + result=[sum-x for x in Index_cod] + return result +def Rotor_in(Index_key,Index_cod): + result_list = [ + value + for _ in range(len(Index_cod)) + for value in Index_key + ] + result=[ + x-y + for x, y in zip(Index_cod, result_list) + ] + + return result +def Rotor_out(Index_key,Index_cod,count): + result_list = [ + symbol + for _ in range(len(Index_cod)) + for symbol in Index_key + ] + result=[x+y for x, y in zip(Index_cod, result_list)] + + return result +def Sum_chek(Index_cod): + for key in range(len(Index_cod)): + if Index_cod[key] < 0: + Index_cod[key]=Index_cod[key]+38 + elif Index_cod[key]>38: + Index_cod[key]=Index_cod[key]-38 + + + + + + + # (Index_cod[i] < 0 for i in range(len(Index_cod))) + #(Index_cod[i] > 36 for i in range(len(Index_cod))) + return Index_cod +def Coder(Index_key,Index_cod,count,sum): + + + for x in Index_key: + Index_cod = Rotor_in(Index_key,Index_cod) + Index_cod = Sum_chek(Index_cod) + + Index_cod = Rotor_norm(Index_cod,sum) + + for x in Index_key: + Index_cod = Rotor_out(Index_key,Index_cod,count) + Index_cod = Sum_chek(Index_cod) + + return Index_cod +def Unindex(Index_cod,List_cod,Rotor_Dict): + List_cod = [ + value + for el in Index_cod + for key, value in Rotor_Dict.items() + if el == key +] + return List_cod + + +Rotor_Dict = { + 0:'0',6:'F',12:'L',18:'S',24:'Y',30:'4',36:'_', + 1:'A',7:'G',13:'M',19:'T',25:'Z',31:'5',37:'.', + 2:'B',8:'H',14:'O',20:'U',26:'N',32:'6',38:',', + 3:'C',9:'Q',15:'P',21:'V',27:'1',33:'7', + 4:'D',10:'J',16:'I',22:'W',28:'2',34:'8', + 5:'E',11:'K',17:'R',23:'X',29:'3',35:'9' + } + +String_cod = input("Введите кодируемое слово: ").upper() +String_key = input("Введите слово шифровки: ").upper() + +l = String_cod.split() +String_cod = '_'.join(l) +l = String_key.split() +String_key = '_'.join(l) + +count =len (String_key) + +List_key = list(String_key) +List_cod = list(String_cod) + +Index_cod = [] +Index_key = [] + +Index_cod = Index(Index_cod,List_cod,Rotor_Dict) +Index_key = Index(Index_key,List_key,Rotor_Dict) + +Sum = sum(Index_key) + +Index_cod = Coder(Index_key,Index_cod,count,Sum) +List_cod = Unindex(Index_cod,List_cod,Rotor_Dict) +String_cod = "".join(List_cod) +print("Результат шифроки: ",String_cod) + +Index_cod = Coder(Index_key,Index_cod,count,Sum) +List_cod =Unindex(Index_cod,List_cod,Rotor_Dict) +String_cod = "".join(List_cod) +print("Результат дешифровки: ",String_cod) + diff --git a/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj b/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj new file mode 100644 index 0000000..454730b --- /dev/null +++ b/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj @@ -0,0 +1,35 @@ + + + Debug + 2.0 + a5db5168-e575-4710-aaed-cef6c07b18d4 + . + Lab_Rab_0.py + + + . + . + Lab_Rab_0 + Lab_Rab_0 + + + true + false + + + true + false + + + + + + + + + + + + \ No newline at end of file From ef89ec08dad4939889d53d1d4ce89cfe812498ca Mon Sep 17 00:00:00 2001 From: EvgenKi <93452186+EvgenKi@users.noreply.github.com> Date: Fri, 10 Dec 2021 03:43:11 +0200 Subject: [PATCH 4/5] Add files via upload --- Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py | 190 ++++++++++++++++++------------- 1 file changed, 113 insertions(+), 77 deletions(-) diff --git a/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py b/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py index 67b79ca..7e41c90 100644 --- a/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py +++ b/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py @@ -1,75 +1,103 @@ -def Index(Index_cod,List_cod,Rotor_Dict): - Index_cod = [ +def Index(index_cod, list_cod, rotor_dict): + """Данная функция ищет индексы по елементам в словаре. + + Она нужна для более легкого поиска и оброботки значений. + + """ + index_cod = [ key - for el in List_cod - for key, value in Rotor_Dict.items() + for el in list_cod + for key, value in rotor_dict.items() if el == value -] - return Index_cod -def Rotor_norm(Index_cod,sum): - result=[sum-x for x in Index_cod] + ] + + return index_cod + + +def Rotor_norm(index_cod, sum): + """ Функция выступает 3-тим фиксированым ротором.""" + + result = [sum - x for x in index_cod] + return result -def Rotor_in(Index_key,Index_cod): + + +def Rotor_in(index_key,index_cod): + """Начало входа в первую часть роторов(начало шифровки).""" result_list = [ value - for _ in range(len(Index_cod)) - for value in Index_key - ] - result=[ - x-y - for x, y in zip(Index_cod, result_list) + for _ in range(len(index_cod)) + for value in index_key + ] + + result = [ + x - y + for x, y in zip(index_cod, result_list) ] return result -def Rotor_out(Index_key,Index_cod,count): + + +def Rotor_out(index_key, index_cod, count): + """Выход и обработки значени(конец шифроки).""" result_list = [ symbol - for _ in range(len(Index_cod)) - for symbol in Index_key + for _ in range(len(index_cod)) + for symbol in index_key ] - result=[x+y for x, y in zip(Index_cod, result_list)] + + result=[x + y for x, y in zip(index_cod, result_list)] return result -def Sum_chek(Index_cod): - for key in range(len(Index_cod)): - if Index_cod[key] < 0: - Index_cod[key]=Index_cod[key]+38 - elif Index_cod[key]>38: - Index_cod[key]=Index_cod[key]-38 +def Sum_chek(index_cod): + """Отдельная функция для проверки диапазона кодируемых индексов.""" + for key in range(len(index_cod)): + if index_cod[key] < 0: + index_cod[key] = index_cod[key] + 38 + elif index_cod[key] > 38: + index_cod[key] = index_cod[key] - 38 - - # (Index_cod[i] < 0 for i in range(len(Index_cod))) - #(Index_cod[i] > 36 for i in range(len(Index_cod))) - return Index_cod -def Coder(Index_key,Index_cod,count,sum): - + return index_cod + + +def Coder(index_key, index_cod, count, sum): + """Функция реализована для упращения работы. + + Может виступать как для шифровки так и для дешифровки. + + """ - for x in Index_key: - Index_cod = Rotor_in(Index_key,Index_cod) - Index_cod = Sum_chek(Index_cod) + for x in index_key: + index_cod = Rotor_in(index_key, index_cod) + index_cod = Sum_chek(index_cod) - Index_cod = Rotor_norm(Index_cod,sum) + index_cod = Rotor_norm(index_cod, sum) - for x in Index_key: - Index_cod = Rotor_out(Index_key,Index_cod,count) - Index_cod = Sum_chek(Index_cod) + for x in index_key: + index_cod = Rotor_out(index_key, index_cod, count) + index_cod = Sum_chek(index_cod) - return Index_cod -def Unindex(Index_cod,List_cod,Rotor_Dict): - List_cod = [ + return index_cod + + +def Unindex(index_cod, list_cod, rotor_dict): + """Ищет по индексу буквы в словаре и перености их в лист.""" + + list_cod = [ value - for el in Index_cod - for key, value in Rotor_Dict.items() + for el in index_cod + for key, value in rotor_dict.items() if el == key -] - return List_cod + ] + + return list_cod -Rotor_Dict = { +rotor_dict = { 0:'0',6:'F',12:'L',18:'S',24:'Y',30:'4',36:'_', 1:'A',7:'G',13:'M',19:'T',25:'Z',31:'5',37:'.', 2:'B',8:'H',14:'O',20:'U',26:'N',32:'6',38:',', @@ -77,35 +105,43 @@ def Unindex(Index_cod,List_cod,Rotor_Dict): 4:'D',10:'J',16:'I',22:'W',28:'2',34:'8', 5:'E',11:'K',17:'R',23:'X',29:'3',35:'9' } - -String_cod = input("Введите кодируемое слово: ").upper() -String_key = input("Введите слово шифровки: ").upper() - -l = String_cod.split() -String_cod = '_'.join(l) -l = String_key.split() -String_key = '_'.join(l) - -count =len (String_key) - -List_key = list(String_key) -List_cod = list(String_cod) - -Index_cod = [] -Index_key = [] - -Index_cod = Index(Index_cod,List_cod,Rotor_Dict) -Index_key = Index(Index_key,List_key,Rotor_Dict) - -Sum = sum(Index_key) - -Index_cod = Coder(Index_key,Index_cod,count,Sum) -List_cod = Unindex(Index_cod,List_cod,Rotor_Dict) -String_cod = "".join(List_cod) -print("Результат шифроки: ",String_cod) - -Index_cod = Coder(Index_key,Index_cod,count,Sum) -List_cod =Unindex(Index_cod,List_cod,Rotor_Dict) -String_cod = "".join(List_cod) -print("Результат дешифровки: ",String_cod) +# Инициализация словаря для индексации. + +string_cod = input("Введите кодируемое слово: ").upper() +string_key = input("Введите слово шифровки: ").upper() +# Ввод кодируемого слова и его ключа. + +space = string_cod.split() +string_cod = '_'.join(space) +space = string_key.split() +string_key = '_'.join(space) +# Замена пробелов для возможности их кодировки. + +count = len (string_key) + +list_key = list(string_key) +list_cod = list(string_cod) +# Разделение строки посимвольно для дальнешей индексации. + +index_cod = [] +index_key = [] + +index_cod = Index(index_cod, list_cod, rotor_dict) +index_key = Index(index_key, list_key, rotor_dict) +# Инициализация поиска индесов. + +sum = sum(index_key) +# Сумма ключа нужна для фиксированого ротора. + +index_cod = Coder(index_key, index_cod, count,sum) +list_cod = Unindex(index_cod, list_cod, rotor_dict) +string_cod = "".join(list_cod) +print("Результат шифроки: ", string_cod) +# Блок кода отвечает за пoлный процесс шифровки кодруемого слова. + +index_cod = Coder(index_key, index_cod, count,sum) +list_cod = Unindex(index_cod, list_cod, rotor_dict) +string_cod = "".join(list_cod) +print("Результат дешифровки: ", string_cod) +# Аналогичный блок когда, но отвечающий за дешифровку. From 361c70a2eb1dbfcca247d36900f253252c50dbd5 Mon Sep 17 00:00:00 2001 From: EvgenKi <93452186+EvgenKi@users.noreply.github.com> Date: Fri, 10 Dec 2021 11:17:42 +0200 Subject: [PATCH 5/5] Tray_1 --- Kiba.docx | Bin 19811 -> 0 bytes {Lab_Rab_0 => LR_DK92_Kiba}/Lab_Rab_0.sln | 46 +++---- Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py | 147 ---------------------- Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj | 35 ------ students.rst => mkr_Kiba/students.rst | 0 5 files changed, 23 insertions(+), 205 deletions(-) delete mode 100644 Kiba.docx rename {Lab_Rab_0 => LR_DK92_Kiba}/Lab_Rab_0.sln (97%) delete mode 100644 Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.py delete mode 100644 Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj rename students.rst => mkr_Kiba/students.rst (100%) diff --git a/Kiba.docx b/Kiba.docx deleted file mode 100644 index 085abbf2748f9f470b2ba21b738b773b03e90d08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19811 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 a 38: - index_cod[key] = index_cod[key] - 38 - - return index_cod - - -def Coder(index_key, index_cod, count, sum): - """Функция реализована для упращения работы. - - Может виступать как для шифровки так и для дешифровки. - - """ - - for x in index_key: - index_cod = Rotor_in(index_key, index_cod) - index_cod = Sum_chek(index_cod) - - index_cod = Rotor_norm(index_cod, sum) - - for x in index_key: - index_cod = Rotor_out(index_key, index_cod, count) - index_cod = Sum_chek(index_cod) - - return index_cod - - -def Unindex(index_cod, list_cod, rotor_dict): - """Ищет по индексу буквы в словаре и перености их в лист.""" - - list_cod = [ - value - for el in index_cod - for key, value in rotor_dict.items() - if el == key - ] - - return list_cod - - -rotor_dict = { - 0:'0',6:'F',12:'L',18:'S',24:'Y',30:'4',36:'_', - 1:'A',7:'G',13:'M',19:'T',25:'Z',31:'5',37:'.', - 2:'B',8:'H',14:'O',20:'U',26:'N',32:'6',38:',', - 3:'C',9:'Q',15:'P',21:'V',27:'1',33:'7', - 4:'D',10:'J',16:'I',22:'W',28:'2',34:'8', - 5:'E',11:'K',17:'R',23:'X',29:'3',35:'9' - } -# Инициализация словаря для индексации. - -string_cod = input("Введите кодируемое слово: ").upper() -string_key = input("Введите слово шифровки: ").upper() -# Ввод кодируемого слова и его ключа. - -space = string_cod.split() -string_cod = '_'.join(space) -space = string_key.split() -string_key = '_'.join(space) -# Замена пробелов для возможности их кодировки. - -count = len (string_key) - -list_key = list(string_key) -list_cod = list(string_cod) -# Разделение строки посимвольно для дальнешей индексации. - -index_cod = [] -index_key = [] - -index_cod = Index(index_cod, list_cod, rotor_dict) -index_key = Index(index_key, list_key, rotor_dict) -# Инициализация поиска индесов. - -sum = sum(index_key) -# Сумма ключа нужна для фиксированого ротора. - -index_cod = Coder(index_key, index_cod, count,sum) -list_cod = Unindex(index_cod, list_cod, rotor_dict) -string_cod = "".join(list_cod) -print("Результат шифроки: ", string_cod) -# Блок кода отвечает за пoлный процесс шифровки кодруемого слова. - -index_cod = Coder(index_key, index_cod, count,sum) -list_cod = Unindex(index_cod, list_cod, rotor_dict) -string_cod = "".join(list_cod) -print("Результат дешифровки: ", string_cod) -# Аналогичный блок когда, но отвечающий за дешифровку. - diff --git a/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj b/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj deleted file mode 100644 index 454730b..0000000 --- a/Lab_Rab_0/Lab_Rab_0/Lab_Rab_0.pyproj +++ /dev/null @@ -1,35 +0,0 @@ - - - Debug - 2.0 - a5db5168-e575-4710-aaed-cef6c07b18d4 - . - Lab_Rab_0.py - - - . - . - Lab_Rab_0 - Lab_Rab_0 - - - true - false - - - true - false - - - - - - - - - - - - \ No newline at end of file diff --git a/students.rst b/mkr_Kiba/students.rst similarity index 100% rename from students.rst rename to mkr_Kiba/students.rst