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"
= "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