亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1769 0

前言

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

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

例如百度ctf 12月的第二場第一個misc

            
666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D
          

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

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

            
import re
s='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}
          

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

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

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

binascii庫的hexlify()和b2a_hex()

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

進制互轉(zhuǎn)

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

int函數(shù)

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

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

            
bin() //10進制轉(zhuǎn)二進制

oct() //十進制轉(zhuǎn)八進制

hex() //十進制轉(zhuǎn)十六進制
          

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

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

或者是

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

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

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

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

            
# make by 江sir
#coding:utf-8
import re
import argparse
 
def bintostr(text):
 text = text.replace(' ','')
 text = re.findall(r'.{8}',text)
 s = map(lambda x:chr(int(x,2)),text) #批量二進制轉(zhuǎ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
          

用法:

十六進制轉(zhuǎn)字符串:

666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D

            
bintostr.py -x "666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D"
flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}
          

二進制轉(zhuǎn)字符串:

可以有空格,也可以無空格

00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100

            
bintostr.py -b "00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100"
/f6732410aadc037fb0cbaa00c7531373.txt
          

ascii轉(zhuǎn)字符串

可以是空格分隔,也可以是,分隔

s='45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32'

            
bintostr.py -a "45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32"
-.-. - ..-. .-.. ... -... ..--.- -... ... .-..
          

以上實例均來自某些ctf賽題

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久久依人综合影院 | 啪啪99久久综合精品色 | 国产社区 | 免费一级毛片在播放视频 | 一级特级欧美aaaaa毛片 | 午夜小网站 | 久久依人 | 一级毛片日韩a欧美视频 | 中文字幕不卡免费高清视频 | 亚洲美女视频网站 | 韩国日本三级在线观看 | 日韩精品影视 | 日本亚洲国产精品久久 | 2021国产精品久久久久 | 亚洲精品视频免费 | 天天狠狠弄夜夜狠狠躁·太爽了 | 色婷婷网 | 亚洲欧洲日本在线 | 国产在线公开视频 | 欧美黄色网址 | 婷婷五月天.com | 欧美久久超级碰碰碰二区三区 | 日韩久久精品一区二区三区 | 96精品国产高清在线看入口 | 毛片女人 | 四虎影院成人在线观看 | 日本成本人在线观看免费视频 | 久久精品久久精品久久 | 国产成人精品午夜在线播放 | 伊人色综合久久天天网 | 亚洲一区二区在线 | 亚洲免费精品视频 | www.色综合| 欧美19p | 久久在线精品视频 | 国产香蕉75在线播放 | 亚洲综合区 | 青青青青在线成人视99 | 国产自产视频在线观看香蕉 | 欧美成人全部免费观看1314色 | 国产性一交一乱一伦一色一情 |