Laitofai

ОИБ | Шифр Цезаря

Apr 13th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # функция занимается раскодировкой одной буквы (возвращает букву которая соответствует отправленной с шагом step)
  2. def decrypt_letter(letter, step):
  3.     if letter.isalpha(): # если буква явялется буквой а не пробелом
  4.         number = ord(letter) - step % 26 # отнимаем от кода буквы шаг (поделенный с остатком на 26)
  5.         if number < 97: # если получился код < 97, то:
  6.             number += 26 # прибавляем 26 что бы перейти в конец алфавита (цикличный сдвиг)
  7.         return chr(number) # возвращаем букву соответсвующую полученному коду символа
  8.     return letter # если это была не буква, то возвращаем символ который нам отправили
  9.  
  10. # функция шифрует одну букву сдвигая её на step шагов, работает аналогично предыдущей функции  
  11. def encrypt_letter(letter, step):
  12.     if letter.isalpha():
  13.         number = ord(letter) + step % 26
  14.         if number  > 122 or 90 < number < 97:
  15.             number -= 26
  16.         return chr(number)
  17.     return letter
  18.  
  19. # занимается расшифровкой целой строки (по факту вызывает функцию расшифровки для каждого символа в строке)
  20. def encrypt(msg, step):
  21.     newMsg = ""
  22.     for i in range(0, len(msg)):
  23.         newMsg += encrypt_letter(msg[i], step)
  24.     return newMsg
  25.  
  26. # занимается зашифровкой целой строки (по факту вызывает функцию зашифровки для каждого символа в строке)
  27. def decrypt(msg, step):
  28.     newMsg = ""
  29.     for i in range(0, len(msg)):
  30.         newMsg += decrypt_letter(msg[i], step)
  31.     return newMsg
  32.  
  33. # функция для удобного ввода шифруемого сообщения, говорит пользователю что нужно ввести
  34. def func_encrypt():
  35.     step = int(input("Input step: "))
  36.     s = input("Enter message: ")
  37.     print(encrypt(s, step))
  38.  
  39. # функция для удобного ввода расшифруемого сообщения, говорит пользователю что нужно ввести
  40. def func_decrypt():
  41.     s = input("Enter message: ")
  42.     step = int(input("Input crypt step: "))
  43.     print(decrypt(s, step))
  44.  
  45. # вызываем по очереди зашифровку и расшифровку
  46. func_encrypt()
  47. func_decrypt()
Add Comment
Please, Sign In to add comment