Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.76 KB | None | 0 0
  1. # Ш И Ф Р П О Д С Т А Н О В К И ( С Л О В О М ) #
  2.  
  3. alf = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя_.,"
  4. alf1 = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя_,"
  5. mat = []
  6. key = []
  7.  
  8. def obrabotka(k):
  9.     '''функция обрабатывает ключ, убирает ненужные символы (повторяющиеся в слове)'''
  10.     #alf = "абвгдеёжзийклмнопрстуфхцчшщъэюя"
  11.     key = []
  12.     for let in k:
  13.         if let not in key:
  14.             key.append(let)
  15.     key = "".join(key)
  16.     #print(key)
  17.     return key
  18.  
  19. def normalize1(mes):
  20.     '''принимает строку, переводит в нижний регистр, удаляет символы, которых нет в условии'''
  21.     #let - буква в слове
  22.     #pr - одготовка строки с пробелами
  23.     #mes - сообщение(любое)
  24.     mes = mes.lower()#перевод строки в нижний резистр
  25.     pr = ""
  26.     #цикл для устранения пробелов из сообщения
  27.     for let in mes:
  28.         if let in alf1:
  29.             pr += let
  30.     return pr
  31.  
  32. def normalize(mes):
  33.     '''принимает строку, переводит в нижний регистр, удаляет символы, которых нет в условии'''
  34.     #let - буква в слове
  35.     #pr - одготовка строки с пробелами
  36.     #mes - сообщение(любое)
  37.     mes = mes.lower()#перевод строки в нижний резистр
  38.     pr = ""
  39.     #цикл для устранения пробелов из сообщения
  40.     for let in mes:
  41.         if let in alf:
  42.             pr += let
  43.     return pr
  44.  
  45. def kluch(k):
  46.     '''функция определяет последовательность ключа для шифрования/дешифрования'''
  47.     key = []
  48.     for let in k:
  49.         if let not in key:
  50.             key.append(let)
  51.             #print(key)
  52.     '''for let in range(len(k)):
  53.            key += k[let]
  54.            #print(key)'''
  55.     key.sort()
  56.     key = "".join(key)
  57.     #key = sorted(k)
  58.     #print(key)
  59.     return key
  60.     #key.sort()
  61.     #key = "".join(key)
  62.  
  63. def matrix(m,k):
  64.     global S
  65.     if len(m)%len(k) == 0:
  66.         S = len(m)/len(k)
  67.     else:
  68.         S = ((len(m)/len(k)+1))
  69.     #print(m,k)
  70.     #print(int(S)+1,len(k))
  71.     global mat
  72.     mat = [["."] * (len(k)) for _ in range(int(S))]
  73.     try:
  74.         r = 0
  75.         #i = 0
  76.         for i in range(int(S)):
  77.             #j = 0
  78.             for j in range(len(k)):
  79.                 mat[i][j] = m[r]
  80.                 print(mat)
  81.                 r += 1
  82.             #j += 1
  83.         #i += 1
  84.         #print("Полученная матрица ",mat)
  85.         print()
  86.         #print(podstanovka())
  87.         return ""
  88.     except IndexError:
  89.         return ""
  90. def matrix1(m,k):
  91.     global S
  92.     if len(m)%len(k) == 0:
  93.         S = len(m)/len(k)
  94.     else:
  95.         S = ((len(m)/len(k)+1))
  96.     print(m,k)
  97.    
  98.     #print(int(S)+1,len(k))
  99.     global mat
  100.     mat = [["."] * (len(k)) for _ in range(int(S))]
  101.     try:
  102.         r = 0
  103.         #i = 0
  104.         for i in range(len(k)):
  105.             #j = 0
  106.             for j in range(int(S)):
  107.                 mat[j][i] = m[r]
  108.                 #print(mat)
  109.                 r += 1
  110.             #j += 1
  111.         #i += 1
  112.         #print("Полученная матрица ",mat)
  113.         print()
  114.         #print(podstanovka())
  115.         return ""
  116.     except IndexError:
  117.         return ""
  118.    
  119. def cryptPODSTANOVKA_SLOVO(m,k):
  120.     #m - открытое/закрытое сообщение (незашифрованное/незашифрованное)
  121.     m = normalize(m)
  122.     k = obrabotka(k)
  123.     key = kluch(k)
  124.     #print(key, k)
  125.     #k = key(k)
  126.     print(matrix(m,k))
  127.     result = ""
  128.     #for i in range((int(S)*len(k))):
  129.     for n in range(len(k)):
  130.             #for s in range(len(str(int(S)))):
  131.         for s in range(int(S)):
  132.                 #print(mat[s][k.index(key[n])])
  133.             result += mat[s][k.index(key[n])]
  134.             #result += mat[i][k.index(key[i])]
  135.     print("ВАШ ТЕКСТ: ",result)
  136.     return ""
  137. def decryptPODSTANOVKA_SLOVO(m,k):
  138.     #m - открытое/закрытое сообщение (незашифрованное/незашифрованное)
  139.     m = normalize(m)
  140.     k = obrabotka(k)
  141.     key = kluch(k)
  142.     #print(key, k)
  143.     #k = key(k)
  144.     print(matrix1(m,k))
  145.     result = ""
  146.     result1 = ""
  147.     #for i in range((int(S)*len(k))):
  148.     for n in range(int(S)):
  149.             #for s in range(len(str(int(S)))):
  150.         for s in range(len(k) ):
  151.                 #print(mat[s][k.index(key[n])])
  152.             result += mat[n][key.index(k[s])]
  153.             #result1 += mat[k.index(key[n])][s]
  154.             #result += mat[i][k.index(key[i])]
  155.     result = normalize1(result)
  156.     print("ВАШ ТЕКСТ: ",result)
  157.     #print("ВАШ ТЕКСТ: ",result1)
  158.     return ""
  159.  
  160. #=========================================================================================================================#
  161. #                                             PODSTANOVKA_SLOVO                                                          #
  162. #=========================================================================================================================#
  163. def PODSTANOVKA_SLOVO():
  164.     print()
  165.     print("╔══════════════════════════════╗")
  166.     print("║ ШИФР ПЕРЕСТАНОВКИ (ОБЫЧНЫЙ)  ║")
  167.     print("║══════════════════════════════║")
  168.     print("║ 1 --- ЗАШИФРОВАТЬ СООБЩЕНИЕ  ║")
  169.     print("╠══════════════════════════════╣")
  170.     print("║ 2 --- РАСШИФРОВАТЬ СООБЩЕНИЕ ║")
  171.     print("╚══════════════════════════════╝")
  172.     print()
  173.     N = int(input("ВАШ ВЫБОР: "))
  174.     if N == 1:
  175.         print(cryptPODSTANOVKA_SLOVO(m = input("ВВЕДИТЕ ВАШЕ ОТКРЫТОЕ СООБЩЕНИЕ: "),k = input("ВВЕДИТЕ ВАШ КЛЮЧ (СЛОВО): ")))
  176.     elif N == 2:
  177.         print(decryptPODSTANOVKA_SLOVO(m = input("ВВЕДИТЕ ВАШЕ ОТКРЫТОЕ СООБЩЕНИЕ: "),k = input("ВВЕДИТЕ ВАШ КЛЮЧ (СЛОВО): ")))
  178.     else:
  179.         print("Вы выбрали неверный вариант =(")
  180.     return ""
  181. #=========================================================================================================================#
  182. print(PODSTANOVKA_SLOVO())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement