#연구/#Python

파이썬으로 Caesar Cipher 복호화 함수 구현하기 #카이사르(시저) 암호화 Decrypt 함수 만들어보기 #Shift 수를 알고 있을 때

every7hing 2021. 3. 30. 22:37
반응형

파이썬으로 Caesar Cipher 복호화 함수 구현하기 

#카이사르(시저) 암호화 Decrypt 함수 만들어보기 

#Shift 수를 알고 있을 때

 

안녕하세요. 오늘은 Caesar Cipher의 복호화 함수를 만들어보겠습니다.

저번 시간에 Caesar Cipher 암호화 함수를 만들어보았는데요.

 

파이썬으로 Caesar 암호화 구현하기 #파이썬으로 숫자 입력 받아 카이사르(시저) 암호화 구현하기!

파이썬으로 Caesar 암호화 구현하기 #파이썬으로 숫자 입력 받아 카이사르(시저) 암호화 구현하기! 안녕하세요. 오랜만에 파이썬 관련 글을 쓰게 되는 것 같네요! 아 요즘 게을러져서... ; )

isss.tistory.com

 

Caesar Cipher의 복호화 함수는 기본적으로 Shift되는 수를 알고 있다는 가정하에 진행됩니다.

따라서 이번에도 입력 값은 두가지가 되겠네요.

def decrypt(encryptedString, n):
  result = ""
  for i in range(len(encryptedString)):
    char = encryptedString[i]
    if (char.isspace()):
      result += " "
    else:
      if (char.isupper()):
        result += chr((ord(char) - n - 65) % 26 + 65)
      else:
        result += chr((ord(char) - n - 97) % 26 + 97)
  return result

 

지난 블로그 글의 암호화 함수와 비교를 해보면, 달라진 곳은 +n -> -n으로 바뀐 것 말고는 없어요.

Shift해준 수 만큼 다시 반대 방향으로 Shift 한다는 의미겠지요.

그럼 구현한 함수를 호출해볼까요?

def main():
  number = int(input("Input Number > "))
  print(encrypt("This is Test String", number))
  print(decrypt(encrypt("This is Test String", number), number))

if __name__ == "__main__":
  main()

 

자 어떤가요?

5를 입력했을 때, 제대로 복호화되어서 나오는 것이 보이시나요?

Input Number > 5
Ymnx nx Yjxy Xywnsl
This is Test String

 

사실 Shift 수를 알고 있다면, 복호화하는 것은 아주 간단한 일입니다.

하지만, Shift 수를 알지 못한다면 어떻게 복호화 할 수 있을까요?

그건 다음 시간에 또 알아보는 걸로 할게요!

그럼 전체 코드 공유하고 저는 이만~

def encrypt(plainString, n):
  result = ""
  for i in range(len(plainString)):
    char = plainString[i]
    if (char.isspace()):
      result += " "
    else:
      if (char.isupper()):
        result += chr((ord(char) + n - 65) % 26 + 65)
      else:
        result += chr((ord(char) + n - 97) % 26 + 97)
  return result

def decrypt(encryptedString, n):
  result = ""
  for i in range(len(encryptedString)):
    char = encryptedString[i]
    if (char.isspace()):
      result += " "
    else:
      if (char.isupper()):
        result += chr((ord(char) - n - 65) % 26 + 65)
      else:
        result += chr((ord(char) - n - 97) % 26 + 97)
  return result


def main():
  number = int(input("Input Number > "))
  print(encrypt("This is Test String", number))
  print(decrypt(encrypt("This is Test String", number), number))

if __name__ == "__main__":
  main()
반응형