python binascii模塊詳解


['Error', 'Incomplete',

'b2a_hex', 'hexlify' #Hexadecimal representation of binary data. 字符串轉16進制
'a2b_hex', 'unhexlify', #Binary data of hexadecimal representation 16進制轉字符串
'b2a_base64', #Base64-code line of data. base64加密
'a2b_base64', #Decode a line of base64 data. base64解密
'crc32', #Compute CRC-32 incrementally

'a2b_hqx', 'b2a_hqx', 'crc_hqx', 'rlecode_hqx', 'rledecode_hqx'
'a2b_qp', 'b2a_qp'
'a2b_uu', 'b2a_uu'
]

s = 'abcde'
h = B.b2a_hex(s.encode()) #'6162636465'
h = B.hexlify(s.encode())
crc = B.crc32(h)

s = B.a2b_hex(h).decode()
s = B.unhexlify(h).decode() #'abcde'

h = B.b2a_base64(s.encode()) #b'YWJjZGU=\n'
s = B.a2b_base64(h).decode() #'abcde'

 


 

base64 標准模塊。
binhex 標准模塊。
uu 標准模塊。
quopri 標准模塊。

binascii模塊包含很多用來方法來轉換二進制和各種ASCII編碼的二進制表示法。通常不直接使用這些功能,而是使用封裝模塊,如uu, base64或binhex。binascii模塊包含用C語言編寫更快的低級功能,通常為高級模塊所使用。

Uu編碼
uu編碼格式現在已經比較少使用,相關函數binascii.a2b_uu(string)和binascii.b2a_uu(data)這里不做介紹。

Binhex編碼
Binhex用於Macintosh平台。這里暫不做介紹。相關函數有:binascii.rledecode_hqx(data) ,binascii.rlecode_hqx(data),binascii.a2b_hqx(data),binascii.b2a_hqx(data) ,binascii.crc_hqx(data, crc)。


Base64編碼
binascii.a2b_base64(string):轉換的base64數據塊為二進制,並返回二進制數據。一次可以傳遞多行。和base64. b64decode對應。
binascii.b2a_base64(data):轉換二進制數據為一行base64編碼的ASCII字符。返回字符串包含換行符。根據base64的標准data的長度最大為57。和base64. b64encode對應。

QP碼
Quoted-printable,或QP encoding,沒有規范的中文譯名,可譯為“可打印字符引用編碼”、“使用可打印字符的編碼”。Quoted-printable是使用可打印的ASCII字符 (如字母、數字與"=")表示各種編碼格式下的字符,以便能在7-bit數據通路上傳輸8-bit數據, 或者更一般地說在非8-bit clean媒體上正確處理數據。這被定義為MIME content transfer encoding,用於e-mail。
QP使用"="開頭的轉義字符. 一般限制行寬為76,因為有些軟件限制了行寬.
binascii.a2b_qp(string[, header]):轉換引述打印數據塊為二進制,並返回二進制數據。多行可以在同一時間被傳遞。如果可選參數頭存在和真實,下划線將被解碼為空格。
實際上,QP碼是是把’\x00’轉換成’=00’,也就是替換’\x’為’=’。

>>> s ='\x00='
>>> s = '=\x00hello'
>>> import binascii
>>> encoded = binascii.b2a_qp(s)
>>> encoded
'=3D=00hello'
>>> decoded = binascii.a2b_qp(encoded)
>>> print decoded
=hello
>>> print repr(decoded)
'=\x00hello'

CRC校驗和
binascii.crc32(data[, crc]):計算的data 的32位校驗和CRC-32時,crc為初始CRC 。crc32與ZIP文件的校驗和一致。

>>> print binascii.crc32("hello world")
222957957
>>> crc = binascii.crc32("hello")
>>> crc = binascii.crc32(" world", crc) & 0xffffffff
>>> print 'crc32 = 0x%08x' % crc
crc32 = 0x0d4a1185
>>> crc
222957957
為了保證跨平台,可以在crc結果上& 0xffffffff。原因如下:
Changed in version 2.6: The return value is in the range [-2**31, 2**31-1] regardless of platform. In the past the value would be signed on some platforms and unsigned on others. Use & 0xffffffff on the value if you want it to match Python 3 behavior.
Changed in version 3.0: The return value is unsigned and in the range [0, 2**32-1] regardless of platform.

二進制轉換
binascii.b2a_hex(data)和binascii.hexlify(data):返回二進制數據的十六進制表示。每個字節被轉換成相應的2位十六進制表示形式。因此,得到的字符串是是原數據長度的兩倍。
binascii.a2b_hex(hexstr) 和binascii.unhexlify(hexstr):從十六進制字符串hexstr返回二進制數據。是b2a_hex的逆向操作。 hexstr必須包含偶數個十六進制數字(可以是大寫或小寫),否則報TypeError。
>>> s = 'hello'
>>> b = b2a_hex(s)
>>> print b
68656c6c6f
>>> a2b_hex(b)
'hello'
>>> b = hexlify(s)
>>> print b
68656c6c6f
>>> unhexlify(b)
'hello'


免責聲明!

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



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