base64 --- Mã hóa dữ liệu Base16, Base32, Base64, Base85

Source code: Lib/base64.py


Mô-đun này cung cấp các chức năng mã hóa dữ liệu nhị phân thành các ký tự ASCII có thể in được và giải mã các mã hóa đó trở lại dữ liệu nhị phân. Điều này bao gồm encodings specified in RFC 4648 (Base64, Base32 và Base16) và Base85 encodings không chuẩn.

Có hai giao diện được cung cấp bởi mô-đun này. Giao diện hiện đại hỗ trợ mã hóa bytes-like objects thành ASCII bytes và giải mã bytes-like objects hoặc các chuỗi chứa ASCII thành bytes. Cả hai bảng chữ cái cơ sở 64 được xác định trong RFC 4648 (bình thường và URL- và an toàn hệ thống tệp) đều được hỗ trợ.

legacy interface không hỗ trợ giải mã từ chuỗi nhưng nó cung cấp các chức năng mã hóa và giải mã đến và đi từ file objects. Nó chỉ hỗ trợ bảng chữ cái tiêu chuẩn Base64 và thêm dòng mới cứ sau 76 ký tự theo RFC 2045. Lưu ý rằng nếu bạn đang tìm kiếm sự hỗ trợ cho RFC 2045 thì có thể bạn muốn xem gói email.

Thay đổi trong phiên bản 3.3: Các chuỗi Unicode chỉ dành cho ASCII hiện được chấp nhận bởi các chức năng giải mã của giao diện hiện đại.

Thay đổi trong phiên bản 3.4: Mọi bytes-like objects hiện đều được chấp nhận bởi tất cả các chức năng mã hóa và giải mã trong mô-đun này. Đã thêm hỗ trợ Ascii85/Base85.

RFC 4648 Mã hóa

Mã hóa RFC 4648 phù hợp để mã hóa dữ liệu nhị phân để có thể gửi dữ liệu đó một cách an toàn qua email, được sử dụng như một phần của URL hoặc được đưa vào như một phần của yêu cầu HTTP POST.

base64.b64encode(s, altchars=None)

Mã hóa bytes-like object s bằng Base64 và trả về bytes được mã hóa.

altchars tùy chọn phải là bytes-like object có độ dài 2, chỉ định bảng chữ cái thay thế cho các ký tự +/. Điều này cho phép một ứng dụng ví dụ: tạo chuỗi Base64 an toàn cho hệ thống tập tin hoặc URL. Mặc định là None, bảng chữ cái Base64 tiêu chuẩn được sử dụng.

Có thể xác nhận hoặc tăng ValueError nếu độ dài của altchars không bằng 2. Tăng TypeError nếu altchars không phải là bytes-like object.

base64.b64decode(s, altchars=None, validate=False)

Giải mã chuỗi bytes-like object hoặc ASCII được mã hóa Base64 s và trả về bytes đã giải mã.

altchars tùy chọn phải là chuỗi bytes-like object hoặc ASCII có độ dài 2 chỉ định bảng chữ cái thay thế được sử dụng thay cho các ký tự +/.

Một ngoại lệ binascii.Error được nêu ra nếu s được đệm không chính xác.

Nếu validateFalse (mặc định), các ký tự không nằm trong bảng chữ cái cơ sở 64 thông thường cũng như bảng chữ cái thay thế sẽ bị loại bỏ trước khi kiểm tra phần đệm. Nếu validateTrue thì những ký tự không phải bảng chữ cái này trong kết quả đầu vào sẽ tạo ra binascii.Error.

Để biết thêm thông tin về việc kiểm tra base64 nghiêm ngặt, hãy xem binascii.a2b_base64()

Có thể xác nhận hoặc tăng ValueError nếu độ dài của altchars không bằng 2.

base64.standard_b64encode(s)

Mã hóa bytes-like object s bằng bảng chữ cái Base64 tiêu chuẩn và trả về bytes được mã hóa.

base64.standard_b64decode(s)

Giải mã chuỗi bytes-like object hoặc ASCII s bằng bảng chữ cái Base64 tiêu chuẩn và trả về bytes đã giải mã.

base64.urlsafe_b64encode(s)

Mã hóa bytes-like object s bằng bảng chữ cái URL- và an toàn hệ thống tệp, thay thế - thay vì +_ thay vì / trong bảng chữ cái Base64 tiêu chuẩn và trả về bytes được mã hóa. Kết quả vẫn có thể chứa =.

base64.urlsafe_b64decode(s)

Giải mã chuỗi bytes-like object hoặc ASCII s bằng bảng chữ cái URL- và an toàn cho hệ thống tệp, thay thế - thay vì +_ thay vì / trong bảng chữ cái Base64 tiêu chuẩn và trả về bytes đã giải mã.

base64.b32encode(s)

Mã hóa bytes-like object s bằng Base32 và trả về bytes được mã hóa.

base64.b32decode(s, casefold=False, map01=None)

Giải mã chuỗi bytes-like object hoặc ASCII được mã hóa Base32 s và trả về bytes đã giải mã.

casefold tùy chọn là cờ chỉ định xem bảng chữ cái viết thường có được chấp nhận làm đầu vào hay không. Vì mục đích bảo mật, mặc định là False.

RFC 4648 cho phép ánh xạ tùy chọn chữ số 0 (không) sang chữ O (oh) và ánh xạ tùy chọn chữ số 1 (một) thành chữ I (mắt) hoặc chữ L (el). Đối số tùy chọn map01 khi không phải None, chỉ định chữ cái nào mà chữ số 1 sẽ được ánh xạ tới (khi map01 không phải là None, chữ số 0 luôn được ánh xạ tới chữ O). Vì mục đích bảo mật, mặc định là None, do đó 0 và 1 không được phép nhập vào.

Một binascii.Error được nâng lên nếu s được đệm không chính xác hoặc nếu có các ký tự không phải bảng chữ cái xuất hiện trong đầu vào.

base64.b32hexencode(s)

Tương tự như b32encode() nhưng sử dụng Bảng chữ cái Hex mở rộng, như được định nghĩa trong RFC 4648.

Added in version 3.10.

base64.b32hexdecode(s, casefold=False)

Tương tự như b32decode() nhưng sử dụng Bảng chữ cái Hex mở rộng, như được định nghĩa trong RFC 4648.

Phiên bản này không cho phép ánh xạ chữ số 0 (không) thành chữ O (oh) và chữ số 1 (một) thành chữ I (mắt) hoặc chữ L (el), tất cả các ký tự này đều được bao gồm trong Bảng chữ cái Hex mở rộng và không thể hoán đổi cho nhau.

Added in version 3.10.

base64.b16encode(s)

Mã hóa bytes-like object s bằng Base16 và trả về bytes được mã hóa.

base64.b16decode(s, casefold=False)

Giải mã chuỗi bytes-like object hoặc ASCII được mã hóa Base16 s và trả về bytes đã giải mã.

casefold tùy chọn là cờ chỉ định xem bảng chữ cái viết thường có được chấp nhận làm đầu vào hay không. Vì mục đích bảo mật, mặc định là False.

Một binascii.Error được nâng lên nếu s được đệm không chính xác hoặc nếu có các ký tự không phải bảng chữ cái xuất hiện trong đầu vào.

Mã hóa Base85

Mã hóa Base85 không được chỉ định chính thức mà là một tiêu chuẩn thực tế, do đó các hệ thống khác nhau thực hiện mã hóa khác nhau.

Các hàm a85encode()b85encode() trong mô-đun này là hai cách triển khai tiêu chuẩn thực tế. Bạn nên gọi hàm có triển khai Base85 được sử dụng bởi phần mềm mà bạn định làm việc.

Hai chức năng có trong mô-đun này khác nhau ở cách chúng xử lý những điều sau:

  • Có bao gồm các điểm đánh dấu <~~> kèm theo hay không

  • Có bao gồm các ký tự dòng mới hay không

  • Tập hợp các ký tự ASCII dùng để mã hóa

  • Xử lý byte rỗng

Tham khảo tài liệu về từng chức năng để biết thêm thông tin.

base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)

Mã hóa bytes-like object b bằng Ascii85 và trả về bytes được mã hóa.

foldspaces là cờ tùy chọn sử dụng chuỗi ngắn đặc biệt 'y' thay vì 4 dấu cách liên tiếp (ASCII 0x20) như được hỗ trợ bởi 'btoa'. Tính năng này không được hỗ trợ bởi mã hóa Ascii85 "chuẩn".

wrapcol kiểm soát xem đầu ra có nên thêm ký tự dòng mới (b'\n') vào hay không. Nếu giá trị này khác 0 thì mỗi dòng đầu ra sẽ dài tối đa bằng số ký tự này, ngoại trừ dòng mới ở cuối.

pad kiểm soát xem đầu vào có được đệm thành bội số của 4 hay không trước khi mã hóa. Lưu ý rằng việc triển khai btoa luôn có tính đệm.

adobe kiểm soát xem chuỗi byte được mã hóa có được đóng khung bằng <~~> hay không, được sử dụng bởi quá trình triển khai Adobe.

Added in version 3.4.

base64.a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\x0b')

Giải mã chuỗi bytes-like object hoặc ASCII được mã hóa Ascii85 b và trả về bytes đã giải mã.

foldspaces là cờ chỉ định xem chuỗi ngắn 'y' có được chấp nhận dưới dạng tốc ký cho 4 khoảng trắng liên tiếp hay không (ASCII 0x20). Tính năng này không được hỗ trợ bởi mã hóa Ascii85 "chuẩn".

adobe kiểm soát xem chuỗi đầu vào có ở định dạng Adobe Ascii85 hay không (tức là được đóng khung bằng <~ và ~>).

ignorechars phải là một chuỗi byte chứa các ký tự cần bỏ qua khi nhập. Điều này chỉ nên chứa các ký tự khoảng trắng và theo mặc định chứa tất cả các ký tự khoảng trắng trong ASCII.

Added in version 3.4.

base64.b85encode(b, pad=False)

Mã hóa bytes-like object b bằng base85 (như được sử dụng trong ví dụ: khác biệt nhị phân kiểu git) và trả về bytes được mã hóa.

Nếu pad là đúng, thì đầu vào sẽ được đệm bằng b'\0' để độ dài của nó là bội số của 4 byte trước khi mã hóa.

Added in version 3.4.

base64.b85decode(b)

Giải mã chuỗi bytes-like object hoặc ASCII được mã hóa base85 b và trả về bytes đã giải mã. Phần đệm được loại bỏ hoàn toàn nếu cần thiết.

Added in version 3.4.

base64.z85encode(s)

Mã hóa bytes-like object s bằng Z85 (như được sử dụng trong ZeroMQ) và trả về bytes được mã hóa. Xem Z85 specification để biết thêm thông tin.

Added in version 3.13.

base64.z85decode(s)

Giải mã chuỗi bytes-like object hoặc ASCII được mã hóa bằng Z85 s và trả về bytes đã giải mã. Xem Z85 specification để biết thêm thông tin.

Added in version 3.13.

Giao diện kế thừa

base64.decode(input, output)

Giải mã nội dung của tệp input nhị phân và ghi dữ liệu nhị phân kết quả vào tệp output. inputoutput phải là file objects. input sẽ được đọc cho đến khi input.readline() trả về một đối tượng byte trống.

base64.decodebytes(s)

Giải mã bytes-like object s, phải chứa một hoặc nhiều dòng dữ liệu được mã hóa base64 và trả về bytes đã giải mã.

Added in version 3.1.

base64.encode(input, output)

Mã hóa nội dung của tệp input nhị phân và ghi dữ liệu được mã hóa base64 kết quả vào tệp output. inputoutput phải là file objects. input sẽ được đọc cho đến khi input.read() trả về một đối tượng byte trống. encode() chèn một ký tự dòng mới (b'\n') sau mỗi 76 byte đầu ra, cũng như đảm bảo rằng đầu ra luôn kết thúc bằng một dòng mới, theo RFC 2045 (MIME).

base64.encodebytes(s)

Mã hóa bytes-like object s, có thể chứa dữ liệu nhị phân tùy ý và trả về bytes chứa dữ liệu được mã hóa base64, với các dòng mới (b'\n') được chèn sau mỗi 76 byte đầu ra và đảm bảo rằng có một dòng mới ở cuối, theo RFC 2045 (MIME).

Added in version 3.1.

Một ví dụ sử dụng mô-đun:

>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
b'data to be encoded'

Cân nhắc về bảo mật

Phần cân nhắc bảo mật mới đã được thêm vào RFC 4648 (phần 12); bạn nên xem lại phần bảo mật đối với bất kỳ mã nào được triển khai vào sản xuất.

Xem thêm

Mô-đun binascii

Mô-đun hỗ trợ chứa các chuyển đổi ASCII-to-binary và nhị phân-to-ASCII.

RFC 1521 - MIME (Phần mở rộng thư Internet đa năng) Phần thứ nhất: Cơ chế chỉ định và mô tả định dạng của nội dung thư Internet

Phần 5.2, "Mã hóa chuyển nội dung Base64," cung cấp định nghĩa về mã hóa base64.