实验吧--密码学--围在栅栏中的爱

这个首先一看就知道是莫斯密码的格式,所以先进行莫斯解密,得到第一个解密之后的明文: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,大功告成!!!!!

猜你喜欢

转载自blog.csdn.net/Jason_ZhouYetao/article/details/81431711