CTF中自定義字符表的Base64編碼求解

Python對(duì)于自定義字符表的Base64編碼求解

在CTF比賽中我們常常會(huì)遇到使用自定義字符表替換Base64編碼的情況,那么怎么處理這類問題呢?

說到自定義字符表(Alphabet Table)解碼Base64瓢对,我們先得知道Base64是如何進(jìn)行編碼操作的谬泌。接下來我們先來介紹一下Base64是怎么進(jìn)行編碼的蒋得。

首先我們先來引入ASCII碼表:


2由境、一個(gè)字節(jié)是8個(gè)比特,先找到對(duì)應(yīng)的ASCII碼拼卵,再將其轉(zhuǎn)化為8位的二進(jìn)制奢浑,轉(zhuǎn)化如下:


????H 對(duì)應(yīng)碼值為72,它對(duì)應(yīng)的二進(jìn)制是 01001000

????e對(duì)應(yīng)碼值為101腋腮,它對(duì)應(yīng)的二進(jìn)制是:01100101

????l對(duì)應(yīng)碼值為108雀彼,它對(duì)應(yīng)的二進(jìn)制是:01101100

????l對(duì)應(yīng)碼值為108,它對(duì)應(yīng)的二進(jìn)制是:01101100

????o對(duì)應(yīng)碼值為111低葫,它對(duì)應(yīng)的二進(jìn)制是:01101111

Base64的碼值是0-63详羡,所以用6位的二進(jìn)制就可以完全表示Base64的碼值(如:000000對(duì)應(yīng)十進(jìn)制0仍律,111111對(duì)應(yīng)的十進(jìn)制為63)嘿悬,將上面8位一組的二進(jìn)制變成6位一組的二進(jìn)制,由于上面是5*8=40個(gè)二進(jìn)制水泉,不能被6整除善涨,所以要加一組0將其變成48個(gè)二進(jìn)制數(shù)(如果還是不能整除窒盐,還要繼續(xù)補(bǔ)8個(gè)0,其實(shí)就是最小公倍數(shù)的倍數(shù))钢拧。

????原來:01001000 01100101 01101100 01101100 01101111 00000000

????現(xiàn)在:010010 000110 010101 101100 011011 000110 111100 000000


3蟹漓、然后將6位一組的二進(jìn)制計(jì)算出十進(jìn)制,再跟Base64的編碼表做對(duì)比源内,再將最后補(bǔ)位的0變成=,即可得到Base64字符

?

010010 對(duì)應(yīng)二進(jìn)制是:18葡粒,18對(duì)應(yīng)Base64字符為:S

000110 對(duì)應(yīng)二進(jìn)制是:6, 6對(duì)應(yīng)Base64字符為:G

010101 對(duì)應(yīng)二進(jìn)制是:21膜钓, 21對(duì)應(yīng)Base64字符為:V

101100 對(duì)應(yīng)二進(jìn)制是:44嗽交, 44對(duì)應(yīng)Base64字符為:s

011011 對(duì)應(yīng)二進(jìn)制是:27, 27對(duì)應(yīng)Base64字符為:b

000110 對(duì)應(yīng)二進(jìn)制是:6颂斜, ?6對(duì)應(yīng)Base64字符為:G

111100 對(duì)應(yīng)二進(jìn)制是:18夫壁, 18對(duì)應(yīng)Base64字符為:8

000000 補(bǔ)位的0變成=

所以Hello對(duì)應(yīng)的Base64編碼就是:SGVsbG8=


而我們?cè)谏鲜鲞^程中多少數(shù)字對(duì)應(yīng)的多少的Base64字符,這個(gè)就是使用了Base64標(biāo)準(zhǔn)的Alphab Table沃疮,標(biāo)準(zhǔn)得Table如下:

我們?cè)谑褂肞ython去解決自定義表的Base64編碼的時(shí)候盒让,我們?cè)撛趺慈プ瞿兀拷酉聛磉M(jìn)行到我們的正題:

其實(shí)很簡單司蔬,我們將自帶的Base64中他的原始Table使用str中的maketrans類進(jìn)行替換即可邑茄,為什么呢?

我們通過上述的編碼過程可以進(jìn)行分析俊啼,我們?cè)诰幋a的過程中只是在最后使用到了表撩扒,但是實(shí)際上表所對(duì)應(yīng)的我們?cè)嫉臄?shù)據(jù)信息是不變的,所以我們先對(duì)編碼過的內(nèi)容字符進(jìn)行替換即可得到正常的Base64編碼吨些,我們?cè)谶M(jìn)行解碼即可搓谆。

于是我們得到了如下的代碼:


import?base64

import?string

str1?=?"NhFpbUihxvB="

string1?=?"ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/"

string2?=?"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

print?(base64.b64decode(str1.translate(str.maketrans(string1,string2))))


上述代碼是一個(gè)將表替換為:

“ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/”的代碼。

我們?cè)賮砜纯慈绾芜M(jìn)行編碼


str2='BB,yyds!'.encode()

print(str(base64.b64encode(str2)).translate(str.maketrans(string2,string1)))


上述就是使用替換字符表的加密編碼豪墅。

這次的代碼很簡單泉手,但是要理解str字符串類中的translate方法是包含了maketrans這種子方法的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偶器,一起剝皮案震驚了整個(gè)濱河市斩萌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屏轰,老刑警劉巖颊郎,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異霎苗,居然都是意外死亡姆吭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門唁盏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來内狸,“玉大人检眯,你說我怎么就攤上這事±サ” “怎么了锰瘸?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昂灵。 經(jīng)常有香客問我避凝,道長,這世上最難降的妖魔是什么眨补? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任恕曲,我火速辦了婚禮,結(jié)果婚禮上渤涌,老公的妹妹穿的比我還像新娘佩谣。我一直安慰自己,他們只是感情好实蓬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布茸俭。 她就那樣靜靜地躺著,像睡著了一般安皱。 火紅的嫁衣襯著肌膚如雪调鬓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天酌伊,我揣著相機(jī)與錄音腾窝,去河邊找鬼。 笑死居砖,一個(gè)胖子當(dāng)著我的面吹牛虹脯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奏候,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼唱星,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼迎卤!你這毒婦竟也來了筋栋?” 一聲冷哼從身側(cè)響起叙凡,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咒精,沒想到半個(gè)月后镶柱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡模叙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年歇拆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡查吊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出湖蜕,到底是詐尸還是另有隱情逻卖,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布昭抒,位于F島的核電站评也,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏灭返。R本人自食惡果不足惜盗迟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熙含。 院中可真熱鬧罚缕,春花似錦、人聲如沸怎静。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚓聘。三九已至腌乡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夜牡,已是汗流浹背与纽。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塘装,地道東北人急迂。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蹦肴,于是被迫代替她去往敵國和親袋毙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容