관리 메뉴

피터의 개발이야기

[정처기 실기] 시저 암호(Caesar cipher) 본문

개발이야기/정보처리기사

[정처기 실기] 시저 암호(Caesar cipher)

기록하는 백앤드개발자 2024. 5. 2. 07:03
반응형

ㅁ 들어가며

ㅇ 2024년 1회 실기 시험에서 나온 시저 암호에 대해서 정리하였다.

 

ㅁ 시저 암호란?

 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 한다. 카이사르 암호(Caesar cipher) 또는 시저 암호는 암호학에서 다루는 간단한 치환암호의 일종이다. 실제로 로마의 황제 카이사르는 이 카이사르 암호를 사용하기도 했다.

  카이사르 암호는 단순하고 간단하여 일반인도 쉽게 사용할 수 있지만, 철자의 빈도와 자주 사용되는 단어와 형태를 이용하면 쉽게 풀 수 있다는 단점이 있다.

 

ㅁ 암호화 방법

 카이사르 암호는 각각의 알파벳을 일정한 거리만큼 밀어 글자를 치환하는 방식으로 암호화한다. 위 예제에서는 3글자씩 밀어서 암호화하기 때문에 B는 E로 치환된다.

 

ㅁ 정보처리기사 실기에서의 문제 유형

def caesar(p){
    isUpper(*p - 'A' + 8) % 26 + 'A'
    isLower(*p - 'a' + 5) % 26 + 'a'
    isNum(*p - '0' + 3) % 10 + '0'
}

p = [ It is 8]
caesar(p);

ㅇ 기억나는 문제의 간략한 형태이다.

ㅇ 문자열 포인터를 이용하여 p++를 이용해 다음 문자열의 대소문자, 숫자를 구분하여 개별적으로 암호화하는 방식이었다.

ㅇ 위의 경우 대문자는 8, 소문자는 5, 숫자는 3으로 치환암호하였다.

26으로 나눈 나머지 값에 'A'/'a'을 더해 준 이유는 z 또는 Z의 범위를 넘어가지 않도록 하기 위해서이다.

 

 

ㅁ ASCII Chart 

032   056 8 080 P 104 h
033 ! 057 9 081 Q 105 i
034 " 058 : 082 R 106 j
035 # 059 ; 083 S 107 k
036 $ 060 < 084 T 108 l
037 % 061 = 085 U 109 m
038 & 062 > 086 V 110 n
039 ' 063 ? 087 W 111 o
040 ( 064 @ 088 X 112 p
041 ) 065 A 089 Y 113 q
042 * 066 B 090 Z 114 r
043 + 067 C 091 [ 115 s
044 , 068 D 092 \ 116 t
045 - 069 E 093 ] 117 u
046 . 070 F 094 ^ 118 v
047 / 071 G 095 _ 119 w
048 0 072 H 096 ` 120 x
049 1 073 I 097 a 121 y
050 2 074 J 098 b 122 z
051 3 075 K 099 c 123 {
052 4 076 L 100 d 124 |
053 5 077 M 101 e 125 }
054 6 078 N 102 f 126 ~
055 7 079 O 103 g    

 

ㅁ 프로그래머스의 시저 암호 문제

https://school.programmers.co.kr/learn/courses/30/lessons/12926

 

def caesar(s, n):
    s = list(s)
    for i in range(len(s)):
        if s[i].isupper():
            s[i] = chr((ord(s[i]) - ord('A') + n) % 26 + ord('A'))
        elif s[i].islower():
            s[i] = chr((ord(s[i]) - ord('a') + n) % 26 + ord('a'))

    return "".join(s)

 

ㅇ 프로그래머스의 모범 코드이다.

ㅇ ord(문자) : 문자에 해당하는 ASCII 정수값 반환 
ㅇ chr(정수) : 정수에 해당하는 ASCII 문자 반환


ㅇ 주피터를 이용하여 수행한 결과이다. 

 

ㅁ 함께 보면 좋은 사이트

카이사르 암호 - 위키백과, 우리 모두의 백과사전

[프로그래머스] 시저 암호 - Python

[Python] 프로그래머스 시저암호 파이썬 코드

반응형
Comments