Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- APM
- kotlin spring
- MySQL
- AWS EKS
- 정보처리기사실기 기출문제
- 티스토리챌린지
- CKA 기출문제
- kotlin querydsl
- CloudWatch
- Linux
- AI
- 공부
- mysql 튜닝
- aws
- Elasticsearch
- 정보처리기사 실기 기출문제
- Kubernetes
- 기록으로 실력을 쌓자
- IntelliJ
- PETERICA
- 코틀린 코루틴의 정석
- kotlin coroutine
- Spring
- kotlin
- Java
- Pinpoint
- CKA
- 오블완
- minikube
- 정보처리기사 실기
Archives
- Today
- Total
피터의 개발이야기
[정처기 실기] 시저 암호(Caesar cipher) 본문
반응형
ㅁ 들어가며
ㅇ 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 |
ㅁ 프로그래머스의 시저 암호 문제
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 문자 반환
ㅇ 주피터를 이용하여 수행한 결과이다.
ㅁ 함께 보면 좋은 사이트
반응형
'개발이야기 > 정보처리기사' 카테고리의 다른 글
[정처기] 코딩연습에 좋은 사이트, myCompiler (0) | 2024.05.03 |
---|---|
[정처기] 2024년 1회 시험에 출제된 세타, 세미, 동등, 자연 조인,... (0) | 2024.05.03 |
[정처기 실기] 정보처리기사 실기 - 2023년 2회 기출문제 (0) | 2024.04.27 |
[정처기 실기] 2024년 실기, 핵심 키워드 130문제 풀이-1 (4) | 2024.04.25 |
[정처기 실기] 2024년 실기 자주 출제되는 SQL, 프로그래밍 기출문제들 정리 (1) | 2024.04.23 |
Comments