[BJDCTF2020]Polybius(波利比奥斯方阵密码)

波利比奥斯方阵密码

常见解题的方阵如下:
[BJDCTF2020]Polybius(波利比奥斯方阵密码)_第1张图片
会发现(2,4)这个坐标既可以表示i 也可以表示 j因此破解的时候这里又会多两种情况.

题目

[BJDCTF2020]Polybius(波利比奥斯方阵密码)_第2张图片
base64 解密提示后告诉一共有14个字符长度,结合题目polybius 猜测这是波利比奥斯方阵密码.
但是a,e,o,i,u这五个字符的代表顺序却不知道,因此可能有54321种情况,在结合刚才所说的i,j同时占一个位置,所以情况数要再乘上2,将这些情况全部都打印出来,然后去找有真实语义的句子就可以了.

脚本

import itertools
s="aeoiu"
sumresult=[]
numsumresult=[]
ciper="ouauuuoooeeaaiaeauieuooeeiea"
for i in itertools.permutations(s,5):#找出所有全排列
    sumresult.append("".join(i))
for i in sumresult:
    temp=""
    for j in ciper:
        temp+=str(i.index(j)+1)
    numsumresult.append(temp)
for i in numsumresult:
    ans_=""
    for j in range(0, len(i),2):
        xx=(int(i[j])-1)*5+int(i[j+1])+96
        if xx>ord('i'):
            xx+=1
        ans_+=chr(xx)
    print(ans_)



结果

[BJDCTF2020]Polybius(波利比奥斯方阵密码)_第3张图片
f

你可能感兴趣的:(其他密码)