代码如下:
#!/usr/bin/env python
# coding=utf-8
def slice(s,size):
return [s[i:i+size] for i in range(0,len(s),size)]
#print slice("abcdefghijklmnop",4)
#['abcd'.'efgh','ijkl','mnop']
def xor(a,b):
return "".join([chr(ord(a[i]) ^ ord(b[i%len(b)])) for i in xrange(len(a))])
#print xor('AAAABBBB','11112222')
#pppppppp
def f(L,n):
ans = ""
for i in range(len(L)):
ans += chr((ord(L[i]) + n) % 256)
return ans
def decrypt(cipher,rounds):
assert len(cipher) == 8
r = cipher[4:]
l = cipher[:4]
tmp = l
l = r
r = tmp
for n in reversed(range(1,rounds + 1)):
tmp = l
l = r
r = xor(tmp,f(r,n))
return l + r
cipher = "dd67ca82d358f0c8479e118addcec2f8ce086c0f6f239f9b66d7226a38c68198dbd777f366fb9fd83b60d11109be174759c75ea56a4866c2"
cipher = slice(cipher.decode("hex"),8)
for i in range(1000):
plain = decrypt(cipher[0],i)
if plain.find("h4ck1t") >= 0:
print "rounds = ",i
rounds = i
flag = ""
for c in cipher:
flag += decrypt(c,rounds)
print flag