这个首先一看就知道是莫斯密码的格式,所以先进行莫斯解密,得到第一个解密之后的明文:KIQLWTFCQGNSOO;
再根据提示的“最近一直在好奇一个问题,QWE到底等不等于ABC?”,这句话可以告诉我们接下来的解密就是密码代换,这个类似于凯撒加密,只是其中的密码本并不是按照字母的顺序,而是按照键盘的从左到右,从上到下的顺序来排列的,具体的脚本如下:
#include<string.h>
#include<stdio.h>
int main()
{
char a[26] = { 'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m' };
char b[26] = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
char key[] = "kiqlwtfcqgnsoo";
char temp;
int ky = strlen(key),t=0;
for (int i = 0; i < ky; i++)
{
temp = key[i];
for (int j = 0; j < 26; j++)
{
if (temp == a[j])
printf("%c", b[j]);
}
}
printf("%c\n", key[5]);
}
这里还牵扯到一个密码本的问题,这里我用了a数组当作是密码,b数组当作是明文,因为我考虑到正常的排序太过于简单,所以应该不会是密码,不过这个题目也没有明说,所以要根绝结果来说,如果说结果不符合题意的,两个数组可以进行调换来进行解密,不过运气比较好,这样的排序可以很好的解出flag来;
这只是第二步,第三步需要进行题目提示的栅栏解密:
一开始我还以为我是哪里不对,后来仔细一看发现字符串是反着来的。。。。。注意第七栏,这样么flag就有了,注意根据题目所说的格式,这次的flag是一个规则的,不过还是将反转字符串的脚本给出,万一下次的字符串是很复杂的,那么自己输还会有打错的风险:
#include<string.h>
#include<stdio.h>
int main()
{
char a[100]="rabnayihsevoli";
char b[] = "CTF{";
int key = strlen(a);
printf("%s", b);
for (int i = key - 1; i >= 0; i--)
{
printf("%c", a[i]);
}
printf("}\n");
}
ok,大功告成!!!!!