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)
关于二进制转换
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
--------------------- ┑( ̄Д  ̄)┍ --------------------------
作者:0yst3r[一只在安全领域努力奋斗的小菜鸡]
来源:博客园[ https://www.cnblogs.com/0yst3r-2046/ ] 引用时请注明来源哦~
(๑•̀ㅂ•́)و✧ヽ(✿゚▽゚)ノ(*^▽^*) φ(≧ω≦*)♪
如果本文对你有用,本人不胜欢喜。
The world is your oyster.