python binascii 二進制轉換實例【b2a_hex、a2b_hex、hexlify、unhexlify】


python binascii 進制轉換實例

 
 
 
  記錄這個是因為在做  2020BJDCTF 中  Crypto 類型里有關16進制轉換的一道題,python腳本里面用到了binascii進制轉換。
 
import binascii
x=0x424A447B4469664D616E63686573746572636F64657D
x=binascii.unhexlify(hex(x)[2:])
print(x)
  
  關於這道題 請戳這里: https://www.cnblogs.com/0yst3r-2046/p/14552276.html
 
 
 

 關於二進制轉換 

 
  binascii.b2a_hex(data)和binascii.hexlify(data):返回二進制數據的十六進制表示。每個字節被轉換成相應的2位十六進制表示形式。因此,得到的字符串是是原數據長度的兩倍。 
  binascii.a2b_hex(hexstr) 和binascii.unhexlify(hexstr):從十六進制字符串hexstr返回二進制數據。是b2a_hex的逆向操作。 hexstr必須包含偶數個十六進制數字(可以是大寫或小寫),否則報TypeError。 
 
舉個栗子~
 
#coding: utf-8
 
 
import binascii
 
 
a = 'worker'
b = binascii.b2a_hex(a.encode())   #有些寫法是這樣的:b = binascii.b2a_hex(a),這樣運行會報錯,報錯原因見文章末尾
print("b2a_hex",b)
 
 
c = binascii.hexlify(a.encode())
print("hexlify",c)
 
 
d = binascii.a2b_hex(b.decode())
print("a2b_hex",d)
 
 
e = binascii.unhexlify(b.decode())
print("unhexlify",e)

 

 
  b2a_hex 與  hexlify 功能一致;  a2b_hex 與  unhexlify 一致。
  b2a_hex 與  a2b_hex 相反;  hexlify 與  unhexlify 相反。
 
運行結果:
 
 
 
有興趣的話,也可以研究一下  base64 的編碼
 
  Base64編碼 :
    binascii.a2b_base64(string):轉換的base64數據塊為二進制,並返回二進制數據。一次可以傳遞多行。和base64. b64decode對應。 
    binascii.b2a_base64(data):轉換二進制數據為一行base64編碼的ASCII字符。返回字符串包含換行符。根據base64的標准data的長度最大為57。和base64. b64encode對應。
 
 

 

關於 binascii.b2a_hex(a) 報錯的問題:

  使用binascii方法一直出現報錯  TypeError: a bytes-like object is required, not 'str' 
 
#coding: utf-8
 
import binascii
 
a = 'worker'
b = binascii.b2a_hex(a)
print(b)
 
#b = binascii.b2a_hex(a)
#TypeError: a bytes-like object is required, not 'str'

 

 

解決方法:

后來修改如下代碼才會不報錯

 b = binascii.b2a_hex(a.encode()) 

原理:

  在新版本的 python3 中,取消了 unicode 類型,代替它的是使用 unicode 字符的字符串類型(str),字符串類型(str)成為基礎類型如下所示,而編碼后的變為了字節類型(bytes)但是兩個函數的使用方法不變:

         decode              encode

    bytes ------> str(unicode)------>bytes

 

u = '中文' #指定字符串類型對象u
str = u.encode('gb2312') #以gb2312編碼對u進行編碼,獲得bytes類型對象str
u1 = str.decode('gb2312')#以gb2312編碼對字符串str進行解碼,獲得字符串類型對象u1
u2 = str.decode('utf-8')#如果以utf-8的編碼對str進行解碼得到的結果,將無法還原原來的字符串內容

 

 

 

 
 

參考資料

 
https://www.cnblogs.com/yinsjun/p/6951588.html
https://www.cnblogs.com/hushaojun/p/7552138.html
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM