Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.85 KB | None | 0 0
  1. a = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя_.,'
  2.  
  3. class Polibiy:
  4. def normalize(mes):
  5. """ Приведение открытого сообщения к стандартному виду """
  6. mes = mes.lower()
  7. m = ''
  8. for i in range(len(mes)):
  9. if mes[i] in a:
  10. m += mes[i]
  11. return m
  12.  
  13.  
  14. def alphabet():
  15. """ Заполнение квадрата Полибия """
  16. alphabet = []
  17. m = 0
  18. for i in range(7):
  19. alphabet.append([])
  20. if i == 0:
  21. alphabet[i].append(' ')
  22. for j in range(1,7):
  23. alphabet[i].append(str(j))
  24. print(alphabet[i])
  25. continue
  26. alphabet[i].append(str(i))
  27. for j in range(6):
  28. alphabet[i].append(a[m])
  29. m += 1
  30. print(alphabet[i])
  31. return alphabet
  32.  
  33.  
  34. def alphabet_with_key():
  35. k = str(input("Введите ключ: "))
  36. a_with_key = ''
  37. for i in range(len(k)):
  38. if k[i] not in a_with_key:
  39. a_with_key += k[i]
  40. for i in range(len(a)):
  41. if a[i] not in a_with_key:
  42. a_with_key += a[i]
  43. alphabet = []
  44. m = 0
  45. for i in range(7):
  46. alphabet.append([])
  47. if i == 0:
  48. alphabet[i].append(' ')
  49. for j in range(1,7):
  50. alphabet[i].append(str(j))
  51. print(alphabet[i])
  52. continue
  53. alphabet[i].append(str(i))
  54. for j in range(6):
  55. alphabet[i].append(a_with_key[m])
  56. m += 1
  57. print(alphabet[i])
  58. return alphabet
  59.  
  60.  
  61. def crypt1():
  62. """ Функция шифрования квадрата Полибия с помощью сдвига по таблице вниз на символ """
  63. menu = str(input("Ключевое слово? y/n: "))
  64. print("_______________________")
  65. if menu == 'y' or menu == 'Y':
  66. alphabet = Polibiy.alphabet_with_key()
  67. elif menu == 'n'or menu == 'N':
  68. alphabet = Polibiy.alphabet()
  69. mes = str(input("Введите открытое сообщение: "))
  70. mes = Polibiy.normalize(mes)
  71. print("_______________________")
  72. c = ''
  73. for m in range(len(mes)):
  74. for i in range(7):
  75. for j in range(7):
  76. if mes[m] == alphabet[i][j]:
  77. if i + 1 == 7:
  78. i = 0
  79. c += alphabet[i + 1][j]
  80. i = 6
  81. j = 6
  82. continue
  83. continue
  84. return c
  85.  
  86.  
  87. def decrypt1():
  88. """ Функция дешифрования квадрата Полибия с помощью сдвига по таблице вверх на символ """
  89. menu = str(input("Ключевое слово? y/n: "))
  90. print("_______________________")
  91. if menu == 'y' or menu == 'Y':
  92. alphabet = Polibiy.alphabet_with_key()
  93. elif menu == 'n'or menu == 'N':
  94. alphabet = Polibiy.alphabet()
  95. mes = str(input("Введите шифртекст: "))
  96. print("_______________________")
  97. c = ''
  98. for m in range(len(mes)):
  99. for i in range(7):
  100. for j in range(7):
  101. if mes[m] == alphabet[i][j]:
  102. if i - 1 == 0:
  103. i = 7
  104. c += alphabet[i - 1][j]
  105. i = 6
  106. j = 6
  107. continue
  108. continue
  109. return c
  110.  
  111.  
  112. def crypt2():
  113. """ Функция шифрования квадрата Полибия с помощью перестановки индексов символов """
  114. menu = str(input("Ключевое слово? y/n: "))
  115. print("_______________________")
  116. if menu == 'y' or menu == 'Y':
  117. alphabet = Polibiy.alphabet_with_key()
  118. elif menu == 'n'or menu == 'N':
  119. alphabet = Polibiy.alphabet()
  120. mes = str(input("Введите открытое сообщение: "))
  121. mes = Polibiy.normalize(mes)
  122. print("_______________________")
  123. c = ''
  124. index_c = []
  125. for m in range(len(mes)):
  126. for i in range(7):
  127. for j in range(7):
  128. if mes[m] == alphabet[i][j]:
  129. index_c.append(i)
  130. i = 6
  131. j = 6
  132. continue
  133. continue
  134. for m in range(len(mes)):
  135. for i in range(7):
  136. for j in range(7):
  137. if mes[m] == alphabet[i][j]:
  138. index_c.append(j)
  139. i = 6
  140. j = 6
  141. continue
  142. continue
  143. i = 0
  144. while i < len(index_c) - 1:
  145. c += alphabet[index_c[i]][index_c[i + 1]]
  146. i += 2
  147. return c
  148.  
  149.  
  150. def decrypt2():
  151. """ Функция дешифрования квадрата Полибия с помощью перестановки индексов символов """
  152. menu = str(input("Ключевое слово? y/n: "))
  153. print("_______________________")
  154. if menu == 'y' or menu == 'Y':
  155. alphabet = Polibiy.alphabet_with_key()
  156. elif menu == 'n'or menu == 'N':
  157. alphabet = Polibiy.alphabet()
  158. c = str(input("Введите шифртекст: "))
  159. print("_______________________")
  160. mes = ''
  161. index_c = []
  162. for m in range(len(c)):
  163. for i in range(7):
  164. for j in range(7):
  165. if c[m] == alphabet[i][j]:
  166. index_c.append(i)
  167. index_c.append(j)
  168. i = 6
  169. j = 6
  170. continue
  171. continue
  172. index_m = []
  173. for i in range(len(index_c) // 2):
  174. index_m.append(index_c[i])
  175. index_m.append(index_c[len(index_c) // 2 + i])
  176. i = 0
  177. while i < len(index_m) - 1:
  178. mes += alphabet[index_m[i]][index_m[i + 1]]
  179. i += 2
  180. return mes
  181.  
  182.  
  183. def crypt3():
  184. """ Функция шифрования квадрата Полибия с помощью перестановки первого и последнего индексов символов """
  185. menu = str(input("Ключевое слово? y/n: "))
  186. print("_______________________")
  187. if menu == 'y' or menu == 'Y':
  188. alphabet = Polibiy.alphabet_with_key()
  189. elif menu == 'n'or menu == 'N':
  190. alphabet = Polibiy.alphabet()
  191. mes = str(input("Введите открытое сообщение: "))
  192. mes = Polibiy.normalize(mes)
  193. print("_______________________")
  194. c = ''
  195. index_c = []
  196. for m in range(len(mes)):
  197. for i in range(7):
  198. for j in range(7):
  199. if mes[m] == alphabet[i][j]:
  200. index_c.append(i)
  201. index_c.append(j)
  202. i = 6
  203. j = 6
  204. continue
  205. continue
  206. ind = index_c[0]
  207. del(index_c[0])
  208. index_c.append(ind)
  209. i = 0
  210. while i < len(index_c) - 1:
  211. c += alphabet[index_c[i]][index_c[i + 1]]
  212. i += 2
  213. return c
  214.  
  215.  
  216. def decrypt3():
  217. """ Функция дешифрования квадрата Полибия с помощью перестановки первого и последнего индексов символов """
  218. menu = str(input("Ключевое слово? y/n: "))
  219. print("_______________________")
  220. if menu == 'y' or menu == 'Y':
  221. alphabet = Polibiy.alphabet_with_key()
  222. elif menu == 'n'or menu == 'N':
  223. alphabet = Polibiy.alphabet()
  224. c = str(input("Введите шифртекст: "))
  225. print("_______________________")
  226. mes = ''
  227. index_c = []
  228. for m in range(len(c)):
  229. for i in range(7):
  230. for j in range(7):
  231. if c[m] == alphabet[i][j]:
  232. index_c.append(i)
  233. index_c.append(j)
  234. i = 6
  235. j = 6
  236. continue
  237. continue
  238. index_m = []
  239. index_m.append(index_c[-1])
  240. for i in range(len(index_c) - 1):
  241. index_m.append(index_c[i])
  242. i = 0
  243. while i < len(index_m) - 1:
  244. mes += alphabet[index_m[i]][index_m[i + 1]]
  245. i += 2
  246. return mes
  247.  
  248. print("ШИФР КВАДРАТ ПОЛИБИЯ...")
  249. print("_______________________")
  250. print("1. Шифрование")
  251. print("2. Дешифрование")
  252. print("_______________________")
  253. menu = int(input("Выберите функцию: "))
  254. print("_______________________")
  255. if menu == 1:
  256. menu = int(input("Выберите способ 1/2/3: "))
  257. print("_______________________")
  258. if menu == 1:
  259. print(Polibiy.crypt1())
  260. elif menu == 2:
  261. print(Polibiy.crypt2())
  262. elif menu == 3:
  263. print(Polibiy.crypt3())
  264. elif menu == 2:
  265. menu = int(input("Выберите способ 1/2/3: "))
  266. print("_______________________")
  267. if menu == 1:
  268. print(Polibiy.decrypt1())
  269. elif menu == 2:
  270. print(Polibiy.decrypt2())
  271. elif menu == 3:
  272. print(Polibiy.decrypt3())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement