1. 程式人生 > >ctf 密碼學基礎

ctf 密碼學基礎

       最近想要學習ctf密碼學的部分,於是開始了從百度百科的入門之旅。

       這裡藉助米斯特安全團隊的一款工具來進行實際編碼解碼。

      一,凱撒密碼

明文中的所有字母都在字母表上向後(或向前)按照一個固定數目進行偏移後被替換成密文。----百度百科

其實就是按照特定的順序將字母替換。比如後移2位,那麼a就變成c,d就變成f。

下面更直觀的看一下:

 

二,Rot13加密

這種加密與凱撒十分類似,就是凱撒密碼中移動13位的結果


三,培根密碼

這是利用a和b(A和B也行)來表示二進位制中的0和1,並以此來表示26個字母,培根密碼5位一組。


這個加密方式主要特徵是隻有兩種不同的字母,都可轉換為ab形式

def就可以表示為AAABBAABAAAABAB


四,柵欄密碼

百科上的例子:

一般比較常見的是2欄的柵欄密碼。比如明文:THERE IS A CIPHER去掉空格後變為:THEREISACIPHER兩個一組,得到:TH ER EI SA CI PH ER先取出第一個字母:TEESCPE再取出第二個字母:HRIAIHR連在一起就是:TEESCPEHRIAIHR還原為所需密碼。而解密的時候,我們先把密文從中間分開,變為兩行:T E E S C P EH R I A I H R再按上下上下的順序組合起來:THEREISACIPHER分出空格,就可以得到原文了:THERE IS A CIPHER

但也存在不是兩欄的情況,就需要對密文的總字數分解因數,嘗試分欄的種類。

比如密文 TAHCEIRPEHIESR  14個字母,可以考慮2欄或7欄,解密如下:


根據不同情況,找到有意義的一組。

五,Base64編碼

還是先看百科上的例子

轉碼過程例子:3*8=4*6記憶體1個位元組佔8位轉前: s 1 3先轉成ascii:對應 115 49 512進位制: 01110011 00110001 001100116個一組(4組) 011100110011000100110011然後才有後面的 011100 110011 000100 110011然後計算機是8位8位的存數 6不夠,自動就補兩個高位0了所有有了 高位補0科學計算器輸入 00011100 00110011 00000100 00110011得到 28 51 4 51查對下照表 c z E z

核心思想在於將8位的二進位制轉換為6位的二進位制。

而6位二進位制共64種組合,可以表示10個數字,26個字母的大小寫,外加符號+和/。一共64個。

對應編碼


有一點要特別指出,當明文個數不是三的倍數時,就會出現 明文數*8%6不為零的情況,

這是如果餘數為2,就在末尾補兩個等號,如果餘數為4,就補一個等號。對於餘下的2個或4個二進位制

採用高位補零的方法。

比如密文:cmFubA== 的明文為ranl

因此我們可以得出base64編碼後的特徵:只含有數字,字母,和符號+ / =。

六,url編碼

這是瀏覽器方便傳輸資訊和加強安全性的編碼。url編碼是字元ASCII碼的十六進位制加上%的格式。

部分對應表:


但在url中不是對所有的字元都要進行url編碼,一般的字母和數字是不會被編碼的。會以原本形式傳遞。

七,Unicode編碼

這是對ASCII碼錶的擴充套件,可以表示更多的字元,採用2個位元組16位的儲存形式。解碼後可以看到16進位制的表示形式。


其特徵為以\u開頭

八,utf8編碼

這是為了利用記憶體採用的一種編碼格式,這裡只是看看其特徵 &#開頭ascii表之外的字元,

對於能用ascii表示的字元仍用ascii表示還是一個長度,就節省了記憶體。


九,hash演算法

hash函式是一系列單向函式,就是這種運算是不可逆的,只可以通過hash運算得到一個hash值,而不能通過hash值得到原始資料。並且經過hash運算後得到的hash值為固定長度。

十,加鹽hash

網站後臺一般只儲存使用者密碼的hash值,但也存在一定風險,因為如果黑客拿到了密碼的hash後,可以的通過對比已經存在的明文與雜湊的對應資料,進行對比,獲得明文密碼。因此,有了加鹽hash,就是隨機的在使用者密碼後加上一段字元後再進行hash運算,由於黑客不知道加的鹽是什麼,依然無法得到密碼。

十一,MD5演算法

MD5是hash演算法中一種特殊的演算法而已,也是hash演算法,最後的結果為128個字元,但一般取其中的64或者32位。

    最後附上一個線上MD5解密網站,當然MD5是不可逆的,這個網站只是通過查詢已經存在的明文密文對照,進行查詢操作