国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python實(shí)現(xiàn)各進(jìn)制轉(zhuǎn)換的總結(jié)大全

2020-02-16 01:43:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

玩ctf經(jīng)常遇到進(jìn)制轉(zhuǎn)換的問(wèn)題,就正好做一個(gè)進(jìn)制轉(zhuǎn)換總結(jié),分享出來(lái)供大家參考學(xué)習(xí),下面來(lái)一起看看詳細(xì)的介紹:

字符串與十六進(jìn)制轉(zhuǎn)換

例如百度ctf 12月的第二場(chǎng)第一個(gè)misc

666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D

比較簡(jiǎn)單的一種做法就是直接調(diào)用字符串的.decode('hex')解密即可, 但如果不用這個(gè)函數(shù)你會(huì)怎么解呢?

一種思路就是先2個(gè)分組,解出每組的ascii值,合并下字符串即可得到,具體代碼如下

import res='666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D's = re.findall(r'.{2}',s)s = map(lambda x:chr(int(x,16)),s)print ''.join(s)>>>flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}

前面說(shuō)了字符串的decode('hex')函數(shù),另外還有兩個(gè)轉(zhuǎn)16進(jìn)制的函數(shù),這里都總結(jié)一下

內(nèi)置函數(shù)hex()

只能轉(zhuǎn)換10進(jìn)制整數(shù)為十六進(jìn)制,不能轉(zhuǎn)字符串

binascii庫(kù)的hexlify()和b2a_hex()

這兩個(gè)函數(shù)的功能是將字符串轉(zhuǎn)換成十六進(jìn)制,對(duì)應(yīng)的解密函數(shù)分別為 unhexlify()a2b_hex()

進(jìn)制互轉(zhuǎn)

二進(jìn)制,八進(jìn)制,十六進(jìn)制轉(zhuǎn)10進(jìn)制比較簡(jiǎn)單,直接調(diào)用

int函數(shù)

int(str,base) //返回十進(jìn)制整數(shù),但注意此時(shí)第一個(gè)參數(shù)為字符串

對(duì)應(yīng)的解密函數(shù)分別是

bin() //10進(jìn)制轉(zhuǎn)二進(jìn)制oct() //十進(jìn)制轉(zhuǎn)八進(jìn)制hex() //十進(jìn)制轉(zhuǎn)十六進(jìn)制

但二進(jìn)制直接轉(zhuǎn)16進(jìn)制就需要多走一步了,先用int轉(zhuǎn)十進(jìn)制,在用上面提到的hex()函數(shù)將十進(jìn)制轉(zhuǎn)換成十六進(jìn)制,比較精簡(jiǎn)的寫(xiě)法是

map(lambda x:hex(int(x,2)),['0011']) //lambda表達(dá)式

或者是

[hex(int(x,2)) for x in ['0011']] //列表解析

對(duì)應(yīng)的解密函數(shù)就是

map(lambda x:bin(int(x,16)),['ef'])

最后在附上自己用python寫(xiě)的一個(gè)進(jìn)制轉(zhuǎn)換小工具,主要功能是對(duì)一組二進(jìn)制,或者ascii,或十六進(jìn)制轉(zhuǎn)換成字符串,想必ctf上也經(jīng)常會(huì)遇到這類題型吧

# make by 江sir#coding:utf-8import reimport argparse def bintostr(text): text = text.replace(' ','') text = re.findall(r'.{8}',text) s = map(lambda x:chr(int(x,2)),text) #批量二進(jìn)制轉(zhuǎn)十進(jìn)制 flag = ''.join(s) return flag def asciitostr(text): if ' ' in text: text = text.split(' ') elif ',' in text: text = text.split(',') s = map(lambda x:chr(int(x)),text) flag = ''.join(s) return flag def hextostr(text): text = re.findall(r'.{2}',text) #print text s = map(lambda x:chr(int(x,16)),text) #print s flag = ''.join(s) return flag  if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("-b") parser.add_argument("-a") parser.add_argument("-x") argv = parser.parse_args() #print argv if argv.b: res = bintostr(argv.b) elif argv.a: res = asciitostr(argv.a) elif argv.x: res = hextostr(argv.x) print res            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 林甸县| 丹阳市| 报价| 靖宇县| 巫溪县| 辽宁省| 石城县| 孝感市| 苗栗县| 宽城| 定远县| 榆中县| 盐山县| 冕宁县| 扶沟县| 抚顺市| 内黄县| 柏乡县| 板桥市| 霍山县| 乐业县| 建宁县| 闻喜县| 新营市| 河津市| 朝阳区| 额敏县| 泰顺县| 犍为县| 清苑县| 登封市| 南郑县| 陆河县| 贵溪市| 嘉荫县| 罗定市| 介休市| 昌邑市| 沁源县| 泗洪县| 乐陵市|