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
- 파이썬
- 백준
- PHP 웹페이지 만들기
- 기계학습
- 머신러닝
- BOJ Python
- WarGame
- 자료구조 복습
- hackctf
- hackerrank
- lob
- HTML
- Sookmyung Information Security Study
- C언어
- XSS Game
- 웹페이지 만들기
- CSS
- The Loard of BOF
- 생활코딩
- c
- Javascript
- c++
- Python
- SWEA
- 숙명여자대학교 정보보안 동아리
- BOJ
- 숙명여자대학교 정보보안동아리
- 드림핵
- 풀이
- siss
Archives
- Today
- Total
혜랑's STORY
[WeChall] Training: Crypto - Caesar I 본문
# 문제
'Caesar' 암호는 아래 그림과 같이 다른 문자가 n만큼 밀려 1대 1로 대응되는 암호 체계이다.
예를 들자면 다음과 같다.
위와 같이 대응하여 평문을 복호화 해보자.
- 평문 : THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
- 암호문 : QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD
따라서 시저 암호 알고리즘을 다음과 같이 나타낼 수 있고
이를 이용하여 파이썬 코드를 작성하여 문제를 해결해보자. 일단 얼마나 옆으로 shift할 것인지 알려주지 않았으므로 가능한 수를 모두 출력하는 방식으로 진행할 것이다.
ciphertext = "SGD PTHBJ AQNVM ENW ITLOR NUDQ SGD KZYX CNF NE BZDRZQ ZMC XNTQ TMHPTD RNKTSHNM HR BELEDLHEMACN"
for key in range(0,23):
c = list(ciphertext)
for i in range(len(c)):
c[i] = chr((ord(c[i])-ord('A')+key)%26+ord('A'))
plain = ''.join(c)
print(plain)
코드를 실행시켜 다음과 같은 결과를 얻었다.
많은 문자들 중 뭔가 읽을 수 있을 법한 문장을 하나 찾았다.
THEUQUICKUBROWNUFOXUJUMPSUOVERUTHEULAZYUDOGUOFUCAESARUANDUYOURUUNIQUEUSOLUTIONUISUCFMFEMIFNBDO
위 문자에서 'U'가 공백을 의미한다고 치면
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG OF CASESAR AND YOUR UNIQUE SOLUTION IS CFMFEMIFNBDO
라는 문장을 얻을 수 있다.
성공이다!
'2021 SISS 21기 활동 > 여름방학 CTF[연합]' 카테고리의 다른 글
[picoCTF] Mod 26 - Cryptography (0) | 2021.07.29 |
---|---|
[WeChall] Training: ASCII (0) | 2021.07.22 |
[WeChall] Encodings - URL (0) | 2021.07.22 |
[WeChall] Training: Baconian (0) | 2021.07.22 |
[WeChall] Training: Stegano I (0) | 2021.07.22 |