Snippets
Revised by
Alexander Hanel
5e3ac09
Set 1
Challenge 1 - Convert hex to base64
import base64
base64.b64encode("49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d".decode("hex"))
Challenge 2 - Fixed XOR
from itertools import cycle
def xor_mb(message, key):
return''.join(chr(ord(m_byte)^ord(k_byte)) for m_byte,k_byte in zip(message, cycle(key)))
xor_mb("1c0111001f010100061a024b53535009181c".decode('hex'), "686974207468652062756c6c277320657965".decode('hex')).encode('hex')
Challenge 3 - Single-byte XOR cipher
from collections import Counter
message = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736".decode('hex')
cnt = Counter(message)
cnt.most_common(3)
for vv in cnt.most_common(7):
for char in "ETAOIN SHRDLU".lower():
key = chr(ord(vv[0]) ^ ord(char))
print key, xor_mb(message, key)
Challenge 4 - Detect single-character XOR
- Solution non-frequency analysis approach
import string
from collections import Counter
from itertools import cycle
def xor_mb(message, key):
return''.join(chr(ord(m_byte)^ord(k_byte)) for m_byte,k_byte in zip(message, cycle(key)))
printset = set(string.printable)
messages = open("4.txt", 'r').readlines()
for line in messages:
message = line.rstrip().decode('hex')
cnt = Counter(message)
for vv in cnt.most_common(3):
for char in "ETAOINSHRDLU".lower():
key = chr(ord(vv[0]) ^ ord(char))
temp = xor_mb(message, key)
if set(temp).issubset(printset) and temp[-1] == "\n":
print key, temp
You can clone a snippet to your computer for local editing. Learn more.