문제풀이/cryptopals

[파이썬] cryptopals 1-4 문제풀이 (Detect single-character XOR)

코엽 2016. 1. 15. 00:42

주소

http://cryptopals.com/sets/1/challenges/4/

문제

Detect single-character XOR

One of the 60-character strings in this file has been encrypted by single-character XOR.

Find it.

(Your code from #3 should help.)

해석

이번엔 여러문장을 xor브루트포싱해서 정상적인 한문장을 고르는겁니다!

1-3코드를 가져와서 약간 수정해서 사용합니다.


알파벳만 골라냈더니 잘 안나옵니다. 공백도 추가합니다. 

코드

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
def get_score(line):
    score = 0
    for letter in line:
        if 'a'<=letter<='z' or 'A'<=letter<='Z' or letter == ' ':
            score += 1
    if score:
        return float(score) / len(line)
    return 0
 
= open('4.txt')
lastresult = ''
while 1:
    nowline = f.readline().strip().decode('hex')
    if nowline == '':
        break
    
    result = ''
    for i in range(0,256):
        line = ''
        for letter in nowline:
            line += chr(ord(letter)^i)
        if get_score(result) < get_score(line):
            result = line
            
    if get_score(lastresult) < get_score(result):
        lastresult = result
        
print lastresult, get_score(lastresult)
cs

결과


실수로 .decode('hex')를 안 넣어서 헤맷었네용