binascii 모듈이란?
파이썬의 binascii 모듈은 바이너리 데이터와 다양한 ASCII 인코딩 형식 간의 변환을 지원하는 표준 라이브러리입니다. 이 모듈은 실행 속도를 높이기 위해 C 언어로 작성된 저수준(low-level) 함수들을 포함하고 있으며, uu, base64, binhex 같은 상위 수준 모듈에서 내부적으로 활용됩니다.
binascii 모듈이 제공하는 함수들은 이름 규칙에 따라 크게 두 가지로 구분됩니다.
- a2b_*: ASCII → 바이너리 변환
- b2a_*: 바이너리 → ASCII 변환
binascii 모듈의 주요 함수
1. uuencode 변환 함수
binascii.a2b_uu(string): uuencode된 한 줄의 데이터를 바이너리로 변환하여 반환합니다. 일반적으로 한 줄에는 45바이트(바이너리 기준)가 포함되며 마지막 줄은 예외입니다. 줄 데이터 뒤에 공백 문자가 붙어 있을 수도 있습니다.
binascii.b2a_uu(data): 바이너리 데이터를 ASCII 문자 한 줄로 변환합니다. 반환값은 개행 문자(newline)를 포함한 변환된 줄입니다.
2. Base64 변환 함수
binascii.a2b_base64(string): base64로 인코딩된 데이터 블록을 바이너리로 디코딩하여 반환합니다.
binascii.b2a_base64(data): 바이너리 데이터를 base64 방식으로 인코딩된 ASCII 문자열로 변환합니다. newline 옵션이 참(True)이면 반환값 끝에 개행 문자가 포함됩니다.
3. Quoted-Printable 변환 함수
binascii.a2b_qp(data): quoted-printable로 인코딩된 데이터 블록을 바이너리로 변환하여 반환합니다.
binascii.b2a_qp(data): 바이너리 데이터를 quoted-printable 방식으로 인코딩된 ASCII 문자열(한 줄 또는 여러 줄)로 변환합니다. 반환값은 변환된 줄(들)입니다.
4. BinHex4 변환 및 RLE 압축 함수
binascii.a2b_hqx(string): binhex4 형식의 ASCII 데이터를 RLE 압축 해제 없이 바이너리로 변환합니다. 입력 문자열은 완전한 바이너리 바이트 수를 담고 있거나, 남는 비트가 0이어야 합니다.
binascii.rledecode_hqx(data): binhex4 표준에 따라 데이터에 대해 RLE(Run-Length Encoding) 압축을 해제합니다.
binascii.rlecode_hqx(data): 데이터에 binhex4 스타일의 RLE 압축을 적용한 결과를 반환합니다.
binascii.b2a_hqx(data): hexbin4 방식의 바이너리→ASCII 변환을 수행하고 그 결과 문자열을 반환합니다. 입력 데이터는 반드시 이미 RLE 인코딩되어 있어야 합니다.
5. CRC 체크섬 계산 함수
binascii.crc_hqx(data, value): value를 초기 CRC 값으로 사용하여 데이터의 16비트 CRC 값을 계산한 후 결과를 반환합니다.
binascii.crc32(data[, value]): value를 초기 CRC 값으로 삼아 데이터의 32비트 체크섬인 CRC-32를 계산합니다. 초기 CRC 값의 기본값은 0입니다.
간단한 사용 예제
base64 변환 함수를 활용하면 다음과 같이 문자열을 인코딩하고 다시 디코딩할 수 있습니다.
import binascii
original = b'Hello, Python!'
# 바이너리 → base64 ASCII
encoded = binascii.b2a_base64(original)
print(encoded) # b'SGVsbG8sIFB5dGhvbiE=\n'
# base64 ASCII → 바이너리
decoded = binascii.a2b_base64(encoded)
print(decoded) # b'Hello, Python!'이처럼 binascii 모듈은 파일 전송 인코딩(uuencode), 이메일 본문 인코딩(base64, quoted-printable), 구형 Mac 파일 형식(binhex4), 데이터 무결성 검증(CRC) 등 다양한 상황에서 유용하게 사용할 수 있습니다.