일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- mutate()
- groupe_by()
- filter()
- sample_n()
- samp;e_frac()
- summarize()
- distinct()
- 대칭형 알고리즘
- select()
- arrange()
- AES
- proc contents
- dplyr
Archives
- Today
- Total
Gae Ko's Blog
[WeChall] Training: Crypto - Transposition I (Crypto, Training) 본문
암호/Wechall Crypto
[WeChall] Training: Crypto - Transposition I (Crypto, Training)
Gae Ko 2018. 6. 27. 05:21[문제]
암호문 oWdnreuf.lY uoc nar ae dht eemssga eaw yebttrew eh nht eelttre sra enic roertco drre . Ihtni koy uowlu dilekt oes eoyrup sawsro don:wp pegrfdmooi.r
[풀이]
전치 암호에 대한 문제인가보다. 역시나 잘 몰라서 찾아보았다.
전치 암호(Tranposition cipher)란 평문의 순서를 재배치하여 암호화하는 방법이다.
만약 key가 "54231"이고 문자열의 위치를 [이동전 -> 이동후]라고 표현한다면 다음과 같이 이동한다.
[1->5]
[2->4]
[3->2]
[4->3]
[5->1]
그럼 복호화하는 경우에는 거꾸로 생각해주면 되겠다.
이 문제에서는 앞부분 oWdnreuf.lY 를 통해 키가 "21"임을 유추할 수 있었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ## wehChall Training: Crypto - Transposition I (Crypto, Training) def transposition(ciphertext, key): plaintext = '' key = list(key) numOfBlock = len(ciphertext) / len(key) # num of block -1 for block in range(numOfBlock): # block: 0 ~ num of block-1 for i in key: k = int(i) - 1 + block*len(key) if(k < len(ciphertext)): plaintext += ciphertext[k] return plaintext # a is ciphertext and key is "21" a = "oWdnreuf.lY uoc nar ae dht eemssga eaw yebttrew eh nht eelttre sra enic roertco drre . Ihtni koy uowlu dilekt oes eoyrup sawsro don:wp pegrfdmooi.r" print "> ciphertext\n" + a print "> plaintext\n" + transposition(a, "21") | cs |
위 코드를 실행해보면 다음과 같다.
즉, 암호문을 복호화하면
Wonderful. You can read the message way better when the letters are in correct order. I think you would like to see your password now: peprgdfomior.
임을 알 수 있다!
Clear!
'암호 > Wechall Crypto' 카테고리의 다른 글
[Wechall] Training: Crypto - Caesar I (0) | 2018.06.27 |
---|