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
- 머신러닝
- 숙명여자대학교 정보보안 동아리
- BOJ
- 숙명여자대학교 정보보안동아리
- 웹페이지 만들기
- 기계학습
- Python
- c++
- 드림핵
- Sookmyung Information Security Study
- siss
- 풀이
- SWEA
- c
- CSS
- 파이썬
- PHP 웹페이지 만들기
- hackerrank
- HTML
- The Loard of BOF
- hackctf
- 자료구조 복습
- 백준
- C언어
- Javascript
- XSS Game
- WarGame
- 생활코딩
- BOJ Python
- lob
Archives
- Today
- Total
혜랑's STORY
[WeChall] Training: Baconian 본문
# 문제
'Bacon's cipher'란 베이컨이 1605년에 고안한 것으로 문자를 숨기기 위한 암호이다.
베이컨 암호의 원리는 다음과 같다. 암호화 하고자 하는 문자에 대하여 대문자, 소문자 2가지에 대한 표현을 한다.
a가 대문자, b가 소문자를 뜻함.
예를 들어보면
- 평문: password
- 베이컨 문: ABBBA AAAAA BAAAB BAAAB BABAA ABBAB BAAAA AAABB
- 암호문: AbcdE FGHIJ kLMNo pQRSt uVwXY ZabCd eFGHI JKLmn
다음과 같은 암호문을 대문자라면 a로 소문자라면 b로 치환한 값이 베이컨 문이 되고 그 베이컨문을 복호화하면 평문이 나오게 되는 것이다.
원리를 이용하여 python으로 암호문을 베이컨 문으로 만드는 코드를 작성하였다.
ciphertext = "BaCoN's cIphEr or THE bacOnIAN CiPHer iS a meThOD oF sTEGaNOGrapHY (a METhoD Of HidIng A sECRet MeSsaGe as OpPOsEd TO a TRUe CiPHeR) dEVIseD BY francis bAcoN. a MessAge Is coNCeALED in THe pRESenTatIoN OF TexT, ratHer thaN iTs coNteNt. tO enCODe A MEsSaGe, eaCh lETter Of THe pLAInText Is rePLAcED By A groUp oF fIvE OF the LettErs 'a' or 'b'. ThiS repLAcemEnT Is dOne aCCORdING to thE alPhabet Of THe BACOnIAN cIpHeR, sHoWn bElOw. NoTe: A SeCoNd vErSiOn oF BaCoN'S CiPhEr uSeS A UnIqUe cOdE FoR EaCh lEtTeR. iN OtHeR WoRdS, i aNd j eAcH HaS ItS OwN PaTtErN. tHe wRiTeR MuSt mAkE UsE Of tWo dIfFeReNt tYpEfAcEs fOr tHiS CiPhEr. AfTeR PrEpArInG A FaLsE MeSsAgE WiTh tHe sAmE NuMbEr oF LeTtErS As aLl oF ThE As aNd bS In tHe rEaL, sEcReT MeSsAgE, tWo tYpEfAcEs aRe cHoSeN, oNe tO RePrEsEnT As aNd tHe oThEr bS. tHeN EaCh lEtTeR Of tHe fAlSe mEsSaGe mUsT Be pReSeNtEd iN ThE ApPrOpRiAtE TyPeFaCe, AcCoRdInG To wHeThEr iT StAnDs fOr aN A Or a b. To dEcOdE ThE MeSsAgE, tHe rEvErSe mEtHoD Is aPpLiEd. EaCh 'TyPeFaCe 1' LeTtEr iN ThE FaLsE MeSsAgE Is rEpLaCeD WiTh aN A AnD EaCh 'TyPeFaCe 2' LeTtEr iS RePlAcEd wItH A B. tHe bAcOnIaN AlPhAbEt iS ThEn uSeD To rEcOvEr tHe oRiGiNaL MeSsAgE. aNy mEtHoD Of wRiTiNg tHe mEsSaGe tHaT AlLoWs tWo dIsTiNcT RePrEsEnTaTiOnS FoR EaCh cHaRaCtEr cAn bE UsEd fOr tHe bAcOn cIpHeR. bAcOn hImSeLf pRePaReD A BiLiTeRaL AlPhAbEt[2] FoR HaNdWrItTeN CaPiTaL AnD SmAlL LeTtErS WiTh eAcH HaViNg tWo aLtErNaTiVe fOrMs, OnE To bE UsEd aS A AnD ThE OtHeR As b. ThIs wAs pUbLiShEd aS An iLlUsTrAtEd pLaTe iN HiS De aUgMeNtIs sCiEnTiArUm (ThE AdVaNcEmEnT Of lEaRnInG). BeCaUsE AnY MeSsAgE Of tHe rIgHt lEnGtH CaN Be uSeD To cArRy tHe eNcOdInG, tHe sEcReT MeSsAgE Is eFfEcTiVeLy hIdDeN In pLaIn sIgHt. ThE FaLsE MeSsAgE CaN Be oN AnY ToPiC AnD ThUs cAn dIsTrAcT A PeRsOn sEeKiNg tO FiNd tHe rEaL MeSsAgE."
upper = 'A'
lower = 'B'
cipherAB = []
for letter in list(ciphertext):
if ord(letter) >= 65 and ord(letter) <= 90:
cipherAB.append(upper)
elif ord(letter) >= 97 and ord(letter)<=122:
cipherAB.append(lower)
else:
pass
ciphertextAB=''.join(cipherAB)
print(ciphertextAB)
코드를 실행시킨 결과이다.
이제 이 베이컨 문을 이 사이트에서 decode 해보았다.
앞의 문장을 보면
VERY WELL DONE FELLOW HACKER THE SECRET KEYWORD IS CEBEMLEPOCIF ....
라는 문장을 찾을 수 있다. 문제에서 flag는 12자라고 하였으므로 찾아둔 flag를 입력하였고 결과는 성공이다!
'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: Crypto - Caesar I (0) | 2021.07.22 |
[WeChall] Training: Stegano I (0) | 2021.07.22 |