题目
分析
密钥14位,密文14位,上面的内容14行n列
所以密钥和密文肯定一位对应一行内容
首先是一个移位密码
将14行内容按照 密钥 的顺序移动,即
新的第一行–内容第二行
新的第二行–内容第五行
……
然后是一个轮转密码,将新第一行在H以前的字符串放到最末尾
‘HGVSFUWIKPBELNACZDTRXMJQOY’
然后基本就解出来了
过程
首先取出内容:
移位:
轮转:
得出结果:
代码
#比尔密码,轮转密码,移位密码
def bill():
key=[2,5,1,3,6,4,9,7,8,14,10,13,11,12]
crypte="HCBTSXWCRQGLES"
data=""
with open("file.txt",'r',encoding='utf-8')as f:
for i in range(14):
data+=f.readline().split('<')[1]
li=[]
li=data.split()
print(li)
newList=[]
for i in key:
newList.append(li[i-1])
print(newList)
with open("result.txt",'w')as out:
for i in range (len(crypte)):
index=newList[i].index(crypte[i])
newList[i]=newList[i][index:]+newList[i][:index]
print(newList[i][-6].lower(),end="")
out.write(newList[i].lower()+'\n')
print()
print(newList)
#主函数
if __name__ == '__main__':
print("/*Begin*\\")
bill()
结果:
flag
flag{xsxsbugkuadmin}
注意小写