解题思路:
看到这题的第一眼就很容易想到这是转轮密码。
所谓转轮密码就是先根据密匙将字符串的行号调整至与密匙相同,然后再根据密文将每一个密文字母调整为每一行的第一个字母,最后观察每一列,找到可阅读的字符串即为明文。
下面就本题进行演示:
1、首先依照密匙的序号排列好字符串的行号。
2: <KPBELNACZDTRXMJQOYHGVSFUWI <
5: <IHFRLABEUOTSGJVDKCPMNZQWXY <
1: <ZWAXJGDLUBVIQHKYPNTCRMOSFE <
3: <BDMAIZVRNSJUWFHTEQGYXPLOCK <
6: <AMKGHIWPNYCJBFZDRUSLOQXVET <
4: <RPLNDVHGFCUKTEBSXQYIZMJWAO <
9: <QWATDSRFHENYVUBMCOIKZGJXPL <
7: <GWTHSPYBXIZULVKMRAFDCEONJQ <
8: <NOZUTWDCVRJLXKISEFAPMYGHBQ <
14:<XPHKZGJTDSENYVUBMLAOIRFCQW <
10:<WABMCXPLTDSRJQZGOIKFHENYVU <
13:<BMCSRFHLTDENQWAOXPYVUIKZGJ <
11:<XPLTDAOIKFZGHENYSRUBMCQWVJ <
12:<TDSWAYXPLVUBOIKZGJRFHENMCQ <
2、将密文的每个字母调整至每行首字母。(将密文字母以前的所有字符放到该字符串的末尾)
2: <HGVSFUWIKPBELNACZDTRXMJQOY <
5: <CPMNZQWXYIHFRLABEUOTSGJVDK <
1: <BVIQHKYPNTCRMOSFEZWAXJGDLU <
3: <TEQGYXPLOCKBDMAIZVRNSJUWFH <
6: <SLOQXVETAMKGHIWPNYCJBFZDRU <
4: <XQYIZMJWAORPLNDVHGFCUKTEBS <
9: <WATDSRFHENYVUBMCOIKZGJXPLQ <
7: <CEONJQGWTHSPYBXIZULVKMRAFD <
8: <RJLXKISEFAPMYGHBQNOZUTWDCV <
14:<QWXPHKZGJTDSENYVUBMLAOIRFC <
10:<GOIKFHENYVUWABMCXPLTDSRJQZ <
13:<LTDENQWAOXPYVUIKZGJBMCSRFH <
11:<ENYSRUBMCQWVJXPLTDAOIKFZGH <
12:<SWAYXPLVUBOIKZGJRFHENMCQTD <
3、写个脚本令其按列输出字符串。
#include <bits/stdc++.h>
using namespace std;
int main()
{
char a[14][26];
for(int i=0;i<14;i++)
for(int j=0;j<26;j++)
cin>>a[i][j];
cout<<endl;
for(int k=0;k<26;k++)
{
for(int l=0;l<14;l++)
cout<<a[l][k];
cout<<endl;
}
}
/*
输入:
HGVSFUWIKPBELNACZDTRXMJQOY
CPMNZQWXYIHFRLABEUOTSGJVDK
BVIQHKYPNTCRMOSFEZWAXJGDLU
TEQGYXPLOCKBDMAIZVRNSJUWFH
SLOQXVETAMKGHIWPNYCJBFZDRU
XQYIZMJWAORPLNDVHGFCUKTEBS
WATDSRFHENYVUBMCOIKZGJXPLQ
CEONJQGWTHSPYBXIZULVKMRAFD
RJLXKISEFAPMYGHBQNOZUTWDCV
QWXPHKZGJTDSENYVUBMLAOIRFC
GOIKFHENYVUWABMCXPLTDSRJQZ
LTDENQWAOXPYVUIKZGJBMCSRFH
ENYSRUBMCQWVJXPLTDAOIKFZGH
SWAYXPLVUBOIKZGJRFHENMCQTD
输出:
HCBTSXWCRQGLES
GPVELQAEJWOTNW
VMIQOYTOLXIDYA
SNQGQIDNXPKESY
FZHYXZSJKHFNRX
UQKXVMRQIKHQUP
WWYPEJFGSZEWBL
IXPLTWHWEGNAMV
KYNOAAETFJYOCU
PITCMONHATVXQB
BHCKKRYSPDUPWO
EFRBGPVPMSWYVI
LRMDHLUYYEAVJK
NLOMINBBGNBUXZ
AASAWDMXHYMIPG
CBFIPVCIBVCKLJ
ZEEZNHOZQUXZTR
DUZVYGIUNBPGDF
TOWRCFKLOMLJAH
RTANJCZVZLTBOE
XSXSBUGKUADMIN <--flag-->
MGJJFKJMTOSCKM
JJGUZTXRWIRSFC
QVDWDEPADRJRZQ
ODLFRBLFCFQFGT
YKUHUSQDVCZHHD
*/
所以,倒数第六行就应该是flag,但是大写进去不对,所以换成小写即
flag{xsxsbugkuadmin}
通过!