Base32加解密算法與實戰

通過孤水繞城大牛的推薦,小菜我在玩某一黑客遊戲時,其中一關碰到一個密文,看樣子很像base64的編碼,但通過base64解碼出現亂碼。後來考慮是Md5(base64),於是又通過base64解碼再轉16進製得到5位數字,很明顯,也不是Md5(base64)。接着又嘗試了base64與其他編碼的組合方式也都不對。後來又仔細看了看孤水繞城大牛發的過關知識掌握要點,才知道這個密文是經過base32編碼得到的,難怪解不出來呢!呵呵!可是google和baidu了一圈也沒找到一個解碼工具,沒辦法看樣子要自己動手了。最後通過研究終於粗淺的瞭解了base32的加密和解密原理,於是便有了本文。

一、Base32數據編碼簡介

   Base32這種數據編碼機制,主要用來把二進制數據編碼成可見的字符串,其編碼規則是:任意給定一個二進制數據,以5個位(bit)爲一組進行切分(base64以6個位(bit)爲一組),對切分而成的每個組進行編碼得到1個可見字符。Base32編碼表字符集中的字符總數爲25=32個,這也是Base32名字的由來。以下是我在網上找的一個標準的Base32編碼表,如表1所示。

   表1 標準Base編碼表

二、編碼演示

下面以一個具體的例子說明Base32的編碼過程。這裏以“bhst”字符串進行編碼。步驟如下:
1.字符“bhst”取ASCII碼之後,對其轉換成二進制得到“1100010,1101000,1110011,1110100,”共四個字節,28個bit的二進制串。注:因爲base32是屬於傳輸8bit字節代碼的編碼方式,所以這裏要對“bhst”字符串對應的二進制最高位加0變成每組8個bit。組成32個bit的二進制串。
2.以5個bit爲一組對“bhst”字符串對應的二進制串進行切分。得到“01100,01001,10100,00111,00110,11101,00000”7個字節的“bhst”二進制串。注:每組的二進制串不足5個用0補充。
3.計算每組二進制串所對應的十進制,然後參考標準Base32編碼表,找出所對應的編碼字符,組合成密文。注:最後一個分組位數不足4個的時候,則用字符“=”編碼。

如表2所示:

   表2 以5個bit爲一組切分得到7個字節的目
                                                                       標二進制串及對應的標準Base32編字符

三、實例解碼

    編碼的算法知道了,想要解碼反推回來就可以了。這裏以遊戲中的密文爲例。“I4AG6AA=”步驟如下:
1、對密文中的編碼字符(對照標準Base32編碼表)找出所對應的十進制編碼值。分別爲: 8   28   0   6   30   0   0。
2、把十進制的編碼值轉換成二進制,不足5個bit用0補充。得到:01000,11100,00000,00110,11110,00000,00000
3、組合每組的二進制串,並以8個bit爲一組進行切分。得到:01000111,00000000,01101111,00000000,00000000
4、還原每組二進制串得到明文的ASCII碼71 0 111 0 0,還原成字符爲Go。

如表3所示:

四、總結

   通過對Base32加解密的算法研究,最後過了這關。本文全憑個人理解所寫,如有錯誤還請兄弟們指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章