解凍すると、暗号文flag.encと暗号プログラムsimple_and_delicious.pyができます。encord関数の繰り返しの中でencrypt関数を呼び出していますが、何度もencrypt関数を呼び出すと元の平文に戻ることがあります。したがって、flag.encファイルの暗号文を元にして、ループ変数lの値を大きくしてencord関数を呼び出すと、perm配列が一致した場合に元の平文に戻ることになります。
以上を行うPythonプログラムを書きます。
#!/usr/bin/env python
#-*- coding:utf-8 -*-

import random
#from flag import flag

flag = '11d.3ilVk_d3CpIO_4nlS.ncnz3e_0S}M_kn5scpm345n3nSe_u_S{iy__4EYLP_aAAall'

def encrypt(msg, perm):
W = len(perm)
while len(msg) % (2*W):
msg += "."
msg = msg[1:] + msg[:1]
msg = msg[0::2] + msg[1::2]
msg = msg[1:] + msg[:1]
res = ""
for j in xrange(0, len(msg), W):
for k in xrange(W):
res += msg[j:j+W][perm[k]]
msg = res
return msg

def encord(msg, perm, l):
for _ in xrange(l):
msg = encrypt(msg, perm)
if 'ASIS{' in msg:
print(msg + '\t' + str(_))
if msg.startswith(flag):
break
return msg

W, l = 7, random.randint(0, 1337)
l = 10000000
perm = range(W)
while True:
random.shuffle(perm)
print(perm)
enc = encord(flag, perm, l)
実行すると次のようになります。perm = [1, 0, 5, 4, 2, 6, 3]のときに元の平文に戻ります。
(略)
[1, 0, 5, 4, 2, 6, 3]
ASIS{1n54n3ly_Simpl3_And_d3lic1Ous_5n4ckS_eVEn_l4zY_Pe0pL3_Can_Mak3}.. 1218
フラグは、
ASIS{1n54n3ly_Simpl3_And_d3lic1Ous_5n4ckS_eVEn_l4zY_Pe0pL3_Can_Mak3}
です。