반응형
파이썬으로 Caesar Cipher 복호화 함수 구현하기
#카이사르(시저) 암호화 Decrypt 함수 만들어보기
#Shift 수를 알고 있을 때
안녕하세요. 오늘은 Caesar Cipher의 복호화 함수를 만들어보겠습니다.
저번 시간에 Caesar Cipher 암호화 함수를 만들어보았는데요.
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()
반응형