1.观察题目
2.解题思路
观察密文发现其是由大小写字母和符号组成,基本可以确定是ASCII编码,然后对应明文的格式是以“flag”开头,由于是凯撒密码,可以先用前四位和密文进行对比计算出偏移量再对密文所有进行解密。
3.解题过程
“f”和”a”在ASCII表中相差5位;
“l”和”f”在ASCII表中相差6位;
“a”和”Z”在ASCII表中相差7位;
“g”和”_”在ASCII表中相差9位;
根据前四位的对比可以发现其不是普通的凯撒密码,其偏移量与其位数有关,根据前四位总结出规律为:后面第n位的偏移量也是这样公差为1的等差数列。用手计算比较麻烦,可编写程序解决:
#include<iostream>
#include<string>
using namespace std;
int main(){
char str1[23] = "afZ_r9VYfScOeO_UL^RWUc";
char str2[23] = {0};
int j,k;
cout<<str1<<endl;
for(j=0;j<23-1;j++){
k=j+5;
cout<<char(int(str1[j])+k);
}
}
最终得到答案flag{Caesar_variation}