题目:
def encrypt(data,groupnums):a=[]b=[]section=int(len(data)/groupnums)for i in range(0,len(data),section):a.append(data[i:i+section])print(a)for i in range(section):for j in range(groupnums):print(a[j])b.append(a[j][i])cipher=(''.join(chr(ord(b[i])^i)for i in range(len(b))))print(cipher)return cipher
我个人在做题之前并没有了解过什么是栅栏加密,直接看着代码逆出来的。
对于栅栏的猜测我是看密文的长度。比如给的是24位密文,推测是4×6或者2×12,稍微试一下得到正确的flag也就出来了。
给出还原密文的代码:
def fuck():miwen = "---------此处填写要还原的密文-------"mid = ""for i in range(len(miwen)):mid+=chr(ord(miwen[i])^i)b=[]for i in range(0,len(mid)):b.append(mid[i])section = 14groupnums=2a=[]mid3=[]for i in range(0,len(b),groupnums):mid2 = b[i:i+groupnums]mid3.append(mid2)print(mid3)data = ""for i in range(groupnums):for j in range(section):data+=(mid3[j][i])print(data)#设section=4,groupnums=7#len(data=12)