0x01. 進入環境,下載下傳附件
題目給的壓縮包,包含一個txt檔案,如圖:

0x02. 問題分析
0x02_1. 維吉利亞密碼
什麼是維吉利亞密碼?維吉尼亞密碼是在凱撒密碼基礎上産生的一種加密方法,它将凱撒密碼的全部25種位移排序為一張表,與原字母序列共同組成26行及26列的字母表。另外,維吉尼亞密碼必須有一個密鑰,這個密鑰由字母組成,最少一個,最多可與明文字母數量相等。1
例如,我們有如下資訊:
明文:I’ve got it.
密鑰:ok
則可以得到密文:
密文:W’fs qcd wd.
操作如下,先看一張密碼表格:
首先,密鑰長度需要與明文長度相同,如果少于明文長度,則重複拼接直到相同。本例中,明文長度為8個字母(非字母均被忽略),密鑰會被程式補全為“okokokok”,那麼明文第一個字母是“I”,密鑰第一個字母是“o”,在表格中找到“I”列與“o”行相交點,字母“W”就是密文第一個字母;同理,“v”列與“k”行交點字母是“F”;“e”列與“o”行交點字母是“S”……
注意:
- 維吉尼亞密碼隻對字母進行加密,不區分大小寫,若文本中出現非字母字元會原樣保留。
- 如果輸入多行文本,每行是單獨加密的。
0x03. 問題分析
0x03_1. 還原密鑰
此處參考大佬的wp,收到很多啟發。
如圖:可以看到有這種時間資料,而且字元數字要滿足相應的長度,在英文中很容易聯想到between…and…的用法,且字元長度剛好符合。那麼,密文frxnimp對應明文between,對照密碼表格,按列找到列頭字母‘b’,然後對應的列找到加密字元‘f’,那麼可以找到行頭密文字元‘e’,以此類推,可以得到加密密文字元‘enereicqvi’
0x03_2. 确定密鑰長度
在原文中,我們可以看到兩個opk出現,根據加密原理,秘鑰長度會不斷重複進行加密的特點,那麼中間的間隔即為密鑰的長度,為11位。上述密鑰推出的10位,不足11位,是以,需要繼續尋找。
文本中出現過opk和16xu這類的,我們推測其中可能是時間序數詞,xu可能對應th,那麼opk則是對應the(英語文法推測)。是以,得到相應的密鑰:opk – vig xu – en,是以補充上述密鑰為:‘enereicqvig’
0x03_3. 确定密鑰順序
文中第一個詞為bju,在文中繼續搜尋,如圖:
有兩個字元和三個字元搭配的形式出現,推測是to the 的感覺,推測bju對應明文the。嘗試推出密鑰‘icq ’。那麼輪轉一下密鑰,可以知道加密的key為:‘icqvigenere’
0x04_4. 找到特殊标志
這麼大一篇文章,肯定不可能一個個看,那麼嘗試搜尋‘{’,因為符号不加密,發現有特殊的字元:
jtcw, ‘{’ vvj ‘zvkvrmtudabiecveaaxpp’ grq ‘}’。
因為jtcw為四個字元,猜測可能是flag,那麼推測出密鑰為:eicq,于是很容易确定括号中的加密字元vvj ‘zvkvrmtudabiecveaaxpp’ grq的加密key為‘vigenereicq’,放入到線上解析位址中http://www.hiencode.com/vigenere.html,如圖:
- https://www.qqxiuzi.cn/bianma/weijiniyamima.php↩︎