图中
就是密钥了
0xGame{xxxxxxxxxxxx}就是明文
3uMgkggklyjs47xg0mx3就是密文
加密方法:
1、将明文两两分组
例:明文0xgame11234
分组1:明文个数为偶数个
例:明文0xgame1234
分组后为0x ga me 12 34
分组2:明文个数为奇数个
分组1用到最后还多一个咋办?
缺补:在最后一个明文字母的后面补上其下一位字母
例:明文0xgame12345
分组后为0x ga me 12 34 56
分组3:明文分组后同一组字母相同
同插,在相同的字母中间插入其下一位字母
例:明文0xgame1123
同插后为0xgame12123
分组后为0x ga me 12 12 34
2、移位和替换
规则:
1、若p1 p2在同一行
对应密文c1 c2分别是紧靠p1 p2右端的字母。其中第一列被看做是最后一列的右方。
2、若p1 p2在同一列
对应密文c1 c2分别是紧靠p1 p2下方的字母。其中第一行被看做是最后一行的下方。
3、若p1 p2不在同一行,不在同一列
则c1 c2是由p1 p2确定的矩形的其他两角的字母
(c1c2有先后顺序)
密文:3u
运用规则3来还原明文
明文:0x(3在前,同行的为先,因此是0x,如果是u3就是x0)
密文:Mg
运用规则2来还原密文
明文:Ga(m对应g,因为加密是往下找,解密就是往上找,即g)
依次解密后发现明文:0xGameemmxmp1ayf4irx
发现flag不对
又查看flag位数为12,而解密后得到14位
emmxmp1ayf4irx中多了两位
根据词义推断两个x重复了
emmmp1ayf4ir才是正确明文
最终flag为0xGame{emmmp1ayf4ir}