Python binascii Module

The binascii module in Python provides functions for converting between binary and various ASCII-encoded binary representations. It is useful for encoding binary data into printable ASCII characters and decoding such encodings back into binary data.

Table of Contents

  1. Introduction
  2. Key Functions
    • binascii.a2b_uu
    • binascii.b2a_uu
    • binascii.a2b_base64
    • binascii.b2a_base64
    • binascii.a2b_hex
    • binascii.b2a_hex
    • binascii.hexlify
    • binascii.unhexlify
    • binascii.crc32
    • binascii.b2a_hqx
    • binascii.a2b_hqx
    • binascii.b2a_rle
    • binascii.a2b_rle
  3. Examples
    • UU Encoding and Decoding
    • Base64 Encoding and Decoding
    • Hexadecimal Encoding and Decoding
    • Calculating CRC32 Checksum
  4. Real-World Use Case
  5. Conclusion
  6. References

Introduction

The binascii module provides a range of functions for converting binary data to ASCII-encoded representations and vice versa. This module is useful for encoding binary data into printable ASCII characters, such as in email or other text-based protocols, and for decoding such encodings back into binary data.

Key Functions

binascii.a2b_uu

Converts a line of ASCII characters encoded using the UU encoding back to binary data.

import binascii

ascii_data = 'begin 644 file.txt\n#0V%T\n \nend\n'
binary_data = binascii.a2b_uu(ascii_data)
print(binary_data)

binascii.b2a_uu

Converts binary data to a line of ASCII characters encoded using the UU encoding.

import binascii

binary_data = b'Hello, World!'
ascii_data = binascii.b2a_uu(binary_data)
print(ascii_data)

binascii.a2b_base64

Converts a base64 ASCII string to binary data.

import binascii

ascii_data = 'SGVsbG8sIFdvcmxkIQ=='
binary_data = binascii.a2b_base64(ascii_data)
print(binary_data)

binascii.b2a_base64

Converts binary data to a base64 ASCII string.

import binascii

binary_data = b'Hello, World!'
ascii_data = binascii.b2a_base64(binary_data)
print(ascii_data)

binascii.a2b_hex

Converts a hexadecimal ASCII string to binary data.

import binascii

ascii_data = '48656c6c6f2c20576f726c6421'
binary_data = binascii.a2b_hex(ascii_data)
print(binary_data)

binascii.b2a_hex

Converts binary data to a hexadecimal ASCII string.

import binascii

binary_data = b'Hello, World!'
ascii_data = binascii.b2a_hex(binary_data)
print(ascii_data)

binascii.hexlify

Converts binary data to a hexadecimal ASCII string.

import binascii

binary_data = b'Hello, World!'
ascii_data = binascii.hexlify(binary_data)
print(ascii_data)

binascii.unhexlify

Converts a hexadecimal ASCII string to binary data.

import binascii

ascii_data = '48656c6c6f2c20576f726c6421'
binary_data = binascii.unhexlify(ascii_data)
print(binary_data)

binascii.crc32

Computes the CRC32 checksum of binary data.

import binascii

binary_data = b'Hello, World!'
checksum = binascii.crc32(binary_data)
print(checksum)

binascii.b2a_hqx

Converts binary data to binhex4 ASCII-encoded format.

import binascii

binary_data = b'Hello, World!'
ascii_data = binascii.b2a_hqx(binary_data)
print(ascii_data)

binascii.a2b_hqx

Converts binhex4 ASCII-encoded format to binary data.

import binascii

ascii_data = b':b&AA<8eA;f$@;&=O<FQD:6YT960N*'
binary_data = binascii.a2b_hqx(ascii_data)
print(binary_data)

binascii.b2a_rle

Encodes binary data to a RLE (Run Length Encoding) ASCII-encoded format.

import binascii

binary_data = b'Hello, World!'
ascii_data = binascii.b2a_rle(binary_data)
print(ascii_data)

binascii.a2b_rle

Decodes RLE (Run Length Encoding) ASCII-encoded format to binary data.

import binascii

ascii_data = b'Hello, World!'
binary_data = binascii.a2b_rle(ascii_data)
print(binary_data)

Examples

UU Encoding and Decoding

import binascii

# UU encode data
binary_data = b'Hello, World!'
ascii_data = binascii.b2a_uu(binary_data)
print('UU Encoded:', ascii_data)

# UU decode data
decoded_data = binascii.a2b_uu(ascii_data)
print('UU Decoded:', decoded_data)

Output:

UU Encoded: b'Hello, World!\n'
UU Decoded: b'Hello, World!'

Base64 Encoding and Decoding

import binascii

# Base64 encode data
binary_data = b'Hello, World!'
ascii_data = binascii.b2a_base64(binary_data)
print('Base64 Encoded:', ascii_data)

# Base64 decode data
decoded_data = binascii.a2b_base64(ascii_data)
print('Base64 Decoded:', decoded_data)

Output:

Base64 Encoded: b'SGVsbG8sIFdvcmxkIQ==\n'
Base64 Decoded: b'Hello, World!'

Hexadecimal Encoding and Decoding

import binascii

# Hex encode data
binary_data = b'Hello, World!'
ascii_data = binascii.b2a_hex(binary_data)
print('Hex Encoded:', ascii_data)

# Hex decode data
decoded_data = binascii.a2b_hex(ascii_data)
print('Hex Decoded:', decoded_data)

Output:

Hex Encoded: b'48656c6c6f2c20576f726c6421'
Hex Decoded: b'Hello, World!'

Calculating CRC32 Checksum

import binascii

# Calculate CRC32 checksum
binary_data = b'Hello, World!'
checksum = binascii.crc32(binary_data)
print('CRC32 Checksum:', checksum)

Output:

CRC32 Checksum: 3964322768

Real-World Use Case

Encoding Binary Data for Email Attachments

When sending binary data via email, it is common to encode it in a text-based format such as base64.

import binascii

def encode_for_email(data):
    return binascii.b2a_base64(data).decode('utf-8')

def decode_from_email(data):
    return binascii.a2b_base64(data.encode('utf-8'))

binary_data = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10'
encoded_data = encode_for_email(binary_data)
print('Encoded for Email:', encoded_data)

decoded_data = decode_from_email(encoded_data)
print('Decoded from Email:', decoded_data)

Output:

Encoded for Email: iVBORw0KGgoAAAANSUhEUgAA
Decoded from Email: b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10'

Conclusion

The binascii module in Python provides a range of functions for encoding and decoding binary data to and from various ASCII-encoded representations. This module is particularly useful for handling binary data in text-based protocols such as email.

References

Comments

Spring Boot 3 Paid Course Published for Free
on my Java Guides YouTube Channel

Subscribe to my YouTube Channel (165K+ subscribers):
Java Guides Channel

Top 10 My Udemy Courses with Huge Discount:
Udemy Courses - Ramesh Fadatare