카이사르 (시저) 암호학

CRYPTOGRAPHY

목록 보기
5/5
post-thumbnail

안녕하십니까 코딩 파인애플입니다
이번 시간에는 카이사르 암호에 관해 알아보겠습니다.

카이사르 암호란❓

카이사르 암호, 시저 암호라고도 불리는 암호학은 단일 문자 치환 암호의 대표적인 예시로 기원전 44년 Caesar 장군이 사용한 암호입니다

카이사르 암호의 핵심 원리는 알파벳을 일정한 칸수만큼 밀어서 글자를 바꾸는 ‘치환’과 끝에 도달하면 처음으로 돌아오는 ‘순환’입니다

예를 들어

평문 알파벳: 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

이 있다고 가정하였을 때 알파벳을 몇 칸 밀어서 암호화할지 결정하는 "Key"가 3일 경우 암호 알파벳은

암호 알파벳: 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

가 됩니다

그렇다면 "What's up" 이라는 평문을 키값이 3인 카이사르 암호로 암호화한다면

W → X → Y → Z
h → i → j → k
a → b → c → d
t → u → v → w
' → (특수문자는 제외) → '

s → t → u → v
u → v → w → x
p → q → r → s

= Zkdw' vxs

Zkdw' vxs가 되게 됩니다

인터넷 좀 뒤져봤다 하시는 분들은 ROT 133️⃣3️⃣3️⃣이라고 한 번 쯤은 보셨을거라고 (아마..?) 생각합니다

ROT13 또한 마찬가지로 카이사르 암호의 단순한 변형입니다
단순 키값이 13이라 카이사르 암호에서 단순 13번 밀어내는 게 끝입니다

그걸 ROT13이라고 부릅니다 (...)


Py7h0n 구현 +❗+❗+❗

파이썬 코드로 단순 카이사르 암호를 구현하면 다음과 같습니다

def caesar_encrypt(text, key):
    result = ""
    for char in text:
        if char.isupper():
            result += chr((ord(char) - 65 + key) % 26 + 65)
        elif char.islower():
            result += chr((ord(char) - 97 + key) % 26 + 97)
        else: result += char
    return result

def caesar_decrypt(text, key):
    return caesar_encrypt(text, -key)

# 평문 텍스트 입력
origin_text = ""
# 키 입력
secret_key = 

encrypted_text = caesar_encrypt(origin_text, secret_key)
print(f"암호화 결과: {encrypted_text}")

decrypted_text = caesar_decrypt(encrypted_text, secret_key)
print(f"복호화 결과: {decrypted_text}")

한번 배웠던 내용을 실습해봅시다 : https://dreamhack.io/wargame/challenges/1817?writeup_page=2

이상으로 글을 마치겠습니다 감사합니다.

profile
풍성한 한가위 보내시길 바랍니다.

0개의 댓글