Python을 사용한 카이사르 암호 암호화 복호화
카이사르 암호 암호화란?
카이사르 암호, 시프트 암호, 카이사르 코드 또는 카이사르 시프트라고도 하는 카이사르 암호는 가장 간단하고 가장 널리 알려진 암호화 기술 중 하나입니다. 일반 텍스트의 각 문자가 알파벳 아래로 고정된 위치의 문자로 대체되는 일종의 대체 암호입니다. 예를 들어 왼쪽 이동이 3이면 D는 A로 대체되고 E는 B가 되는 식입니다. 이 방법은 개인 서신에서 사용했던 Julius Caesar의 이름을 따서 명명되었습니다.
암호화
예를 들어, 다음은 23의 오른쪽 이동에 해당하는 세 위치의 왼쪽 회전을 사용하는 카이사르 암호입니다(이동 매개변수가 키로 사용됨).
일반 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
암호 X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
암호화할 때 사람은 "일반"행에서 메시지의 각 문자를 찾아 "암호"행에 해당 문자를 기록합니다.
평문: 게으른 개를 뛰어넘는 빠른 갈색 여우
암호문: QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD
간단히 말해서
plain text = "hello"
shift = 5
cipher text = "mjqqt"
print output: "The encoded text is mjqqt"
암호화 코드
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
direction = input("Type 'encode' to encrypt, type 'decode' to decrypt:\n")
text = input("Type your message:\n").lower()
shift = int(input("Type the shift number:\n"))
def encrypt(plain_text,shift_amount):
cipher_text =""
for letter in plain_text:
position = alphabet.index(letter)
new_position = position +shift_amount
if new_position > 25:
new_position2 = new_position-26
new_letter2 = alphabet[new_position2]
cipher_text += new_letter2
else:
new_letter1 = alphabet[new_position]
cipher_text += new_letter1
print(f"The encoded text is {cipher_text}.")
encrypt(plain_text = text,shift_amount = shift)
25[목록은 0부터 시작하므로 총 요소는 25] 이후에 알파벳이 없기 때문에 new_position > 25에 대해 조건을 확인했습니다. 마지막 요소를 통과한 후 시작 위치로 돌아가려면 이 조건을 확인해야 합니다.
복호화
간단히 말해서
cipher text = "mjqqt"
shift = 5
plain text = "hello"
print output: "The encoded text is hello"
복호화 코드
def decrypt(cipher_text, shift_amount):
plain_text = ""
for letter in cipher_text:
position = alphabet.index(letter)
new_position = position - shift_amount
plain_text += alphabet[new_position]
print(f"The decoded text is {plain_text}")
해독을 위해 아무것도 빼거나 더할 필요가 없습니다. 슬라이싱 또는 인덱싱을 수행하려는 경우 오른쪽 끝에서 목록에서 알 수 있듯이 시작 카운트는 -1입니다.
따라서 암호 첫 번째 요소 = a
시프트 번호 = 5
일반 텍스트 = 1-5 = -4
알파벳[-4] = w
따라서 여기서는 아무것도 조정할 필요가 없습니다. 직접 잘 작동합니다. 로컬 변수만 기억하고 호출하는 함수는 암호화 부분에서 언급한 것과 거의 동일해야 합니다.
위의 두 코드 부분은 caesar-cipher 작동 방식에 대한 개요를 제공합니다. 다음과 같은 제약 조건을 추가하여 코드를 최적화할 수 있습니다.
알파벳의 문자?
암호 프로그램?
위에서 언급한 모든 쿼리의 솔루션으로 여기에 최종 코드를 추가하고 있습니다. 또한 위에서 언급한 암호화 및 암호 해독 코드의 최적화된 버전입니다.
최종 코드
logo = """
,adPPYba, ,adPPYYba, ,adPPYba, ,adPPYba, ,adPPYYba, 8b,dPPYba,
a8" "" "" `Y8 a8P_____88 I8[ "" "" `Y8 88P' "Y8
8b ,adPPPPP88 8PP""""""" `"Y8ba, ,adPPPPP88 88
"8a, ,aa 88, ,88 "8b, ,aa aa ]8I 88, ,88 88
`"Ybbd8"' `"8bbdP"Y8 `"Ybbd8"' `"YbbdP"' `"8bbdP"Y8 88
88 88
"" 88
88
,adPPYba, 88 8b,dPPYba, 88,dPPYba, ,adPPYba, 8b,dPPYba,
a8" "" 88 88P' "8a 88P' "8a a8P_____88 88P' "Y8
8b 88 88 d8 88 88 8PP""""""" 88
"8a, ,aa 88 88b, ,a8" 88 88 "8b, ,aa 88
`"Ybbd8"' 88 88`YbbdP"' 88 88 `"Ybbd8"' 88
88
88
"""
print(logo)
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
def caesar(start_text, shift_amount, cipher_direction):
end_text = ""
if cipher_direction == "decode":
shift_amount *= -1
for char in start_text:
if char in alphabet:
position = alphabet.index(char)
new_position = position + shift_amount
end_text += alphabet[new_position]
else:
end_text += char
print(f"Here's the {cipher_direction}d result: {end_text}")
should_end = False
while not should_end:
direction = input("Type 'encode' to encrypt, type 'decode' to decrypt:\n")
text = input("Type your message:\n").lower()
shift = int(input("Type the shift number:\n"))
shift = shift % 26
caesar(start_text=text, shift_amount=shift, cipher_direction=direction)
restart = input("Type 'yes' if you want to go again. Otherwise type 'no'.\n")
if restart == "no":
should_end = True
print("Goodbye")
한 프로그램에서 사용자에게 요청하여 암호화와 암호 해독을 모두 수행합니다. 이것을 살펴보고 좋아요를 주고 제공된 프로그램과 설명에 대해 어떻게 생각하는지 의견을 말하십시오.
내 Python Bootcamp 프로그램 및 리소스에 대한 세부 정보를 보려면. Github 링크 아래로 이동하여 탐색하십시오.
어떤 유형의 ASCII 단어를 생성하려면 아래 링크로 이동하십시오. 이 사이트에서 해당 로고를 생성했습니다.
ASCII Art Generator
Gihub Link for This program
Reference
이 문제에 관하여(Python을 사용한 카이사르 암호 암호화 복호화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ramakm/caesar-cipher-encryption-decryption-using-python-38fn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)