Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Mã hóa dữ liệu Base64 bằng Python

Các hàm trong module base64 dịch dữ liệu nhị phân thành tập con ASCII phù hợp để truyền qua giao thức plaintext.

Các hàm mã hóa/giải mã triển khai thông số kỹ thuật trong RFC 3548, định nghĩa thuật toán Base16, Base32, Base64, và tiêu chuẩn de-facto Ascii85 và Base85. Mã hóa RFC 3548 phù hợp để mã hóa dữ liệu nhị phân để gửi email an toàn, dùng như phần của URL, hoặc đưa vào HTTP POST request.

Giao diện hiện đại của module này mã hóa bytes-like objects thành ASCII bytes, và giải mã bytes-like objects hoặc chuỗi chứa ASCII thành bytes. Các bảng chữ cái base-64 theo RFC 3548 (bình thường, và an toàn cho URL/hệ thống file) được hỗ trợ.

Mã hóa dữ liệu Base64 bằng Python

Giao diện hiện đại cung cấp:

base64.b64encode(): Mã hóa bytes-like object dùng Base64 và trả về bytes đã mã hóa.

base64.b64decode(): Giải mã bytes-like object hoặc chuỗi ASCII đã mã hóa Base64 và trả về bytes đã giải mã.

Để minh họa hàm b64encode() và b64decode() của module base64, trước tiên mã hóa một chuỗi Python.

>>> import base64
>>> string = 'Python programming'
>>> enc_string = string.encode()
>>> enc_string
b'Python programming'

Đối tượng byte này được mã hóa bằng b64encode():

>>> b64_estring = base64.b64encode(enc_string)
>>> b64_estring
b'UHl0aG9uIHByb2dyYW1taW5n'

Dùng decode() để lấy chuỗi từ đối tượng byte này.

>>> dec_string = b64_estring.decode()
>>> dec_string
'UHl0aG9uIHByb2dyYW1taW5n'

Hàm encode() trả về đối tượng byte:

>>> b1 = dec_string.encode()
>>> b1
b'UHl0aG9uIHByb2dyYW1taW5n'

Giải mã bằng b64decode():

>>> d = base64.b64decode(b1)
>>> d
b'Python programming'

Cuối cùng lấy chuỗi gốc bằng giải mã đối tượng byte trên:

>>> originalstring = d.decode()
>>> originalstring
'Python programming'

Bảng chữ cái base64 có thể dùng + và /, nếu dùng trong URL, cần mã hóa thay thế các ký tự đó.

urlsafe_b64encode(): Mã hóa bytes-like object dùng bảng chữ cái an toàn cho URL/hệ thống file, thay - cho + và _ cho / trong bảng Base64 tiêu chuẩn, trả về bytes đã mã hóa.

urlsafe_b64decode(): Giải mã bytes-like object hoặc chuỗi ASCII dùng bảng chữ cái an toàn URL/hệ thống file, thay - cho + và _ cho / trong Base64 tiêu chuẩn, trả về bytes đã giải mã.

Giao diện cũ (legacy) cung cấp hàm mã hóa/giải mã file object:

base64.encode(input, output): Mã hóa nội dung file nhị phân input và ghi dữ liệu base64 kết quả ra file output. input và output phải là file object. input đọc cho đến khi input.read() trả về bytes object rỗng.

base64.decode(input, output): Giải mã nội dung file nhị phân input và ghi dữ liệu nhị phân kết quả ra file output. input và output phải là file object. input đọc cho đến khi input.readline() trả về bytes object rỗng.

Trước tiên, tạo file dùng mode 'wb':

>>> f1 = open('file.txt', 'wb')
>>> f1.write('Simple is better than complex'.encode())
>>> f1.close()

Bây giờ mã hóa file dùng phương thức base64.encode:

>>> f1 = open('file.txt', 'rb')
>>> f2 = open('file.dat', 'wb')
>>> base64.encode(f1, f2)
>>> f1.close()
>>> f2.close()

File.dat hiển thị nội dung sau nếu mở bằng notepad:

U2ltcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXg=

Giải mã file.dat ra filenew.txt dùng decode():

>>> f1 = open('file.dat', 'rb')
>>> f2 = open('filenew.txt', 'wb')
>>> base64.decode(f1, f2)
>>> f1.close()
>>> f2.close()

Văn bản gốc sẽ hiện thấy trong filenew.txt.