这次比赛竟然还有Classic Crypto专场,属实不易。然后我也把古典密码学做完了,占我总分的9.35。
大帝的征程#1
大帝 -> 凯撒 -> 凯撒密码
因为这是moectf比赛,所以flag一定是moectf打头,所以可以算得偏移,就出来了:
密文: zbrpgs{p0adh3e_gu3_j0eyq}
明文: moectf{c0nqu3r_th3_w0rld}
大帝的征程#2
这个题目,肯定还是凯撒,但是毕竟是#2了,所以是凯撒变种,但是试了试没什么思路,,,就开了hint:
![image-20201008094329085](/images/2020moectf Classic Crypto/image-20201008094329085.png)
看了hint,瞬间明白了,他时候一个换表凯撒,这个就得自己写脚本搞了:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string table="0abcdefghijklmnopqrstuvwxyz0123456789";//这里有个小问题,就是我给table前面加了一个0,用来占位,,,毕竟从1开始还是比较舒服
string a;
cin>>a;
for(int i=0;i<a.size();i++)
{
int temp;
if(a[i]!='{' && a[i]!='}' && a[i]!='_')
{
for(int j=1;j<table.size();j++)
{
if(table[j]==a[i])
{
int temp;
temp=(j+36*2-i)%36;
cout<<table[temp];
}
}
}
else cout<<a[i];
}
return 0;
}
密文: mpgfxk{j8w05q4_8xk_d7mhqfht} 明文: moectf{c0nquer_th3_un1v3rs3}
外面的世界
外面的世界 + 密文盲猜 => 栅栏密码
在线解密,
PS:做栅栏密码的时候一定要注意复制粘贴,别多复制空格了,,,你会解不出来的
密文: mc{i33ny_-n~otR1n_cp1FN}efaFc32Tsuy
明文: moectf{Rai1F3nc3_3nc2ypT_1s-FunNy~}
大帝的征程#3
啊这,,,这个密文出现了一些奇怪字符,应该是这个凯撒的table是整个ASCII表,,,然后想到(出题人提醒)在ASCII编码中有一种密码叫做ROT47,然后我们在线解密试一下:
密文: >@64E7L4_?BF6C0E9b0)s$trN
明文: moectf{c0nquer_th3_XDSEC}
大帝的征程#维吉尼亚
u1s1这个题目我是手撕的,,,因为我们的答案最后肯定是moectf{……},所以我们就用moectf,对应出key:dsecx
然后在线工具跑一下:
密文:pgieqi{k0_ajxW_k-R3zq?}
密钥: dsecx
明文: moectf{s0_whaT_s-N3xt?}
大帝的征程#维吉尼亚Ex
下载附件,然后搜索到密文:ooukot{ig3_oqf1_Ymiedmms_BzVn3_s0w_w0_3csO}
这个题的话,,我就提供两种思路吧:
手撕
他说难撕就难撕么???
我不信!我要试一试。
首先moectf绝对是没有问题的,又因为维吉尼亚只是字母在变化,数字没有改变,所以根据 3->e , 0->O以及部分密钥循环使用,我们可以猜一些东西 ig3->th3 , Ymiedmms -> Vigenere , w0 -> s0 , s0w -> n0t , 3csO -> 3asy……这个时候密钥好像就已经出来了(即使这个时候密钥没有完全出来,那么剩下1或者2个不确定的,暴力解决~~)。
密文: ooukot{ig3_oqf1_Ymiedmms_BzVn3_s0w_w0_3csO}
密钥: caqivopzxmfde
明文: moectf{th3_rea1_Vigenere_MaYb3_n0t_s0_3asY}
正解
这里有一种方法叫做“重合指数对照”来破解维吉尼亚密码,在线工具在这里~~
![image-20201009013434884](/images/2020moectf Classic Crypto/image-20201009013434884.png)
要是知道密钥的长度并且填上去会快一点,但要是什么也不填,这个网站也挺快的~~
moectf{th3_rea1_vigenere_mayb3_n0t_s0_3asy}