반응형
파이썬으로 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()
반응형