题目给了一个密文和一组对应嘚明文密文,因此肯定先通过已知对应明密文破解出加密算法再利用加密算法和密文得到flag。根据题目名称b64将给定明文base64加密一下看,发現指定位置变换相同所以本题应该一个单表代换再加一个base64解密。
大致得到对应表如上但很糟糕的,明密文变换没有直接的对应关系這里应该随机映射。所以我们需要进行暴力破解
统计一下已知的字母变换对,发现有22个字符还不知道而未知的9个位置中,有6种不同字苻爆破6种字符的选择,再根据flag格式flag{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}以及内容均为09af来验证否可能为正确答案大致代码如下:
这样爆破可以得到很多结果,再根据flag常见格式进行筛选得到满足要求的flag一共有六个:
依次提交,其中某一个为正确答案
本题考查python中的伪随机数代码首先给出了700个伪随机数的输出,而MT19937只有624个不同状态因此可以推出伪随机种子的,根据伪随机种子内容继续向下猜测可以得到key。
在得到key之后尝试进行解密注意到加密环节Feistel结构,当前的加密函数不可复用因此需要对照该加密函数写解密函数,再进行调用即可完整代码如下: