주소
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 f = 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')를 안 넣어서 헤맷었네용
'문제풀이 > cryptopals' 카테고리의 다른 글
[파이썬] cryptopals 1-5 문제풀이 (Implement repeating-key XOR) (0) | 2016.01.15 |
---|---|
[파이썬] cryptopals 1-3 문제풀이 (Single-byte XOR cipher) (0) | 2016.01.15 |
[파이썬] cryptopals 1-2 문제풀이 (Fixed XOR) (1) | 2016.01.15 |
[파이썬] cryptopals 1-1 문제풀이 (Convert hex to base64) (0) | 2016.01.15 |