Advertisement
Oleksandr_Bitkov

substitutionCipher

May 6th, 2024 (edited)
614
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.16 KB | Cryptocurrency | 0 0
  1. def encode(msg, key, alpha):
  2.  
  3.     if alpha == "ukr":
  4.         alphabet = [
  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.     elif alpha == "en":
  40.         alphabet = [
  41.             "a",
  42.             "b",
  43.             "c",
  44.             "d",
  45.             "e",
  46.             "f",
  47.             "g",
  48.             "h",
  49.             "i",
  50.             "j",
  51.             "k",
  52.             "l",
  53.             "m",
  54.             "n",
  55.             "o",
  56.             "p",
  57.             "q",
  58.             "r",
  59.             "s",
  60.             "t",
  61.             "u",
  62.             "v",
  63.             "w",
  64.             "x",
  65.             "y",
  66.             "z",
  67.         ]
  68.     else:
  69.         raise TypeError("Не зрозуміла абетка")
  70.  
  71.     padded_key = key.ljust(9)
  72.     my_list = [[0, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1], [0] + list(padded_key) + [""]]
  73.  
  74.     encrypt_msg = ""
  75.  
  76.     counter = 1
  77.     new_sublist = [counter]
  78.  
  79.     for letter in alphabet:
  80.         if letter not in padded_key:
  81.             new_sublist.append(letter)
  82.             if len(new_sublist) - 1 == 10:
  83.                 my_list.append(new_sublist)
  84.                 counter += 1
  85.                 new_sublist = [counter]
  86.  
  87.     if len(new_sublist) > 1:
  88.         my_list.append(new_sublist)
  89.  
  90.     counter = 2
  91.     for charset in msg:
  92.         if charset in my_list[1]:
  93.             my_index = my_list[1].index(charset)
  94.             encrypt_msg += str(my_list[0][my_index])
  95.             continue
  96.         for sublist_index in range(2, len(my_list)):
  97.             if charset in my_list[sublist_index]:
  98.                 my_index = my_list[sublist_index].index(charset)
  99.                 encrypt_msg += f"{sublist_index - 1}{my_list[0][my_index]}"
  100.  
  101.     return encrypt_msg
  102.  
  103.  
  104. def decode(encrypt_msg, key, alpha):
  105.  
  106.     if alpha == "ukr":
  107.         alphabet = [
  108.             "а",
  109.             "б",
  110.             "в",
  111.             "г",
  112.             "ґ",
  113.             "д",
  114.             "е",
  115.             "є",
  116.             "ж",
  117.             "з",
  118.             "и",
  119.             "і",
  120.             "ї",
  121.             "й",
  122.             "к",
  123.             "л",
  124.             "м",
  125.             "н",
  126.             "о",
  127.             "п",
  128.             "р",
  129.             "с",
  130.             "т",
  131.             "у",
  132.             "ф",
  133.             "х",
  134.             "ц",
  135.             "ч",
  136.             "ш",
  137.             "щ",
  138.             "ь",
  139.             "ю",
  140.             "я",
  141.         ]
  142.     elif alpha == "en":
  143.         alphabet = [
  144.             "a",
  145.             "b",
  146.             "c",
  147.             "d",
  148.             "e",
  149.             "f",
  150.             "g",
  151.             "h",
  152.             "i",
  153.             "j",
  154.             "k",
  155.             "l",
  156.             "m",
  157.             "n",
  158.             "o",
  159.             "p",
  160.             "q",
  161.             "r",
  162.             "s",
  163.             "t",
  164.             "u",
  165.             "v",
  166.             "w",
  167.             "x",
  168.             "y",
  169.             "z",
  170.         ]
  171.     else:
  172.         raise TypeError("Не зрозуміла абетка")
  173.  
  174.     decrypt_msg = ""
  175.  
  176.     padded_key = key.ljust(9)
  177.     my_list = [[0, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1], [0] + list(padded_key) + [""]]
  178.  
  179.     counter = 1
  180.     new_sublist = [counter]
  181.  
  182.     for letter in alphabet:
  183.         if letter not in padded_key:
  184.             new_sublist.append(letter)
  185.             if len(new_sublist) - 1 == 10:
  186.                 my_list.append(new_sublist)
  187.                 counter += 1
  188.                 new_sublist = [counter]
  189.  
  190.     if len(new_sublist) > 1:
  191.         my_list.append(new_sublist)
  192.  
  193.     def find_char(str, my_list):
  194.         my_index = my_list[0].index(int(str[1]))
  195.         if my_index == 0:
  196.             my_index += 1
  197.         if 0 < int(str[0]) + 1 < len(my_list) and 0 < my_index < len(my_list[0]):
  198.             return my_list[int(str[0]) + 1][my_index]
  199.  
  200.     temp_char = ""
  201.     check = False
  202.     inside_conter = 0
  203.     double_char = []
  204.  
  205.     for row in my_list[1:]:
  206.         value = row[0]
  207.         if int(value) != 0:
  208.             double_char.append(value)
  209.  
  210.     # print(f"\n{encrypt_msg}\n")
  211.  
  212.     for char in encrypt_msg:
  213.         if (int(char) in double_char) or check:
  214.             temp_char += char
  215.             inside_conter += 1
  216.             if inside_conter == 2:
  217.                 check = False
  218.                 inside_conter = 0
  219.                 decrypt_msg += find_char(temp_char, my_list)
  220.                 temp_char = ""
  221.             else:
  222.                 check = True
  223.         else:
  224.             index = my_list[0].index(int(char))
  225.             if index == 0:
  226.                 index += 1
  227.             decrypt_msg += my_list[1][index]
  228.  
  229.     return decrypt_msg
  230.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement