一、题目
采用穷尽密钥的搜索方法破译移位密码,,测试用例为:
BEEAKFYDJXUQYHYJIQRYHTYJIQFBQDUYJIIKFUHCQD
二、 分析测试用例
- 所有字符均为英文字符,共需要列举Key从1到25共25种情况。
- 通过C语言程序运行,每次移动一位,输出所有移位情况。
三、代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*找到下一个字符*/
char change(char word)
{
if (word == 'Z')
return 'A';
else if (word == 'z')
return 'a';
else return word + 1;
}
int main()
{
//输入密文
char sample[100];//不超过100个单词的密文
printf("请输入密文(100个单词以内):");
scanf("%s", sample);
//暴力破解
int i, j;
for (i = 1; i <= 26; i++)
{
for (j = 0; j < strlen(sample); j++)
{
sample[j] = change(sample[j]);
}
printf("密钥为%d时,明文为:", i);
printf("%s\n", sample);
}
}
四、测试结果
五、结果分析
通过对每种密钥情况破译下的结果,结合英语知识,判断出当Key = 10时,明文是有意义的。
LOOK UP THE AIR ITS A BIRD ITS A PLANE ITS SUPERMAN
(看天上,是一只鸟,是一架飞机,是一位超人)