Python

Python Standard Library – base64

Xin chào, bài viết này sẽ giới thiệu về thư viện base64 của Python.

Base64 là gì?

Base64 là một phương pháp encode, sử dụng một tập hợp 64 ký tự để biểu diễn lại dữ liệu gốc, qua đó, mỗi ký tự sẽ biểu diễn cho 6-bit dữ liệu. Như vậy, với 3 bytes (tức 24 bits) dữ liệu, chúng ta sẽ cần 4 ký tự để biểu diễn.

Base64 được sử dụng để encode các dữ liệu non-textual (image, audio, machine-executable code,…) thành các ký tự ASCII in được (xem hình 1) để có thể truyền tải qua các hệ thống sử dụng textual data (ví dụ là email).

Hình 1 – các ký tự được sử dụng trong Base64

Thư viện base64 của Python

Python cung cấp thư viện base64 cho phép encode dữ liệu 8-bit thành các ký tự ASCII in được và decode các ký tự ASCII này ngược lại trở về dữ liệu gốc.

Functions:
+ Encode dữ liệu:

encodedData = base64.b64encode(data)

Trong đó:
+ data – dữ liệu gốc ở dạng raw-bytes, tức là kiểu bytes của Python 3;
+ encodedData – dữ liệu đã được encode ở dạng raw-bytes.

+ Decode dữ liệu:

data = base64.b64decode(encodedData)

Trong đó:
+ encodedData – dữ liệu đã được encode ở dạng raw-bytes hoặc String;
+ data – dữ liệu gốc được phục hồi, có kiểu bytes.


Ví dụ

Ví dụ 1: encode/decode chuỗi ký tự

import base64
data = "codelungtung.com"

encodedData = base64.b64encode(data.encode('utf-8'))
print("Encoded data: ", encodedData)

print("Data: ", base64.b64decode(encodedData))

Result:
Encoded data: b’Y29kZWx1bmd0dW5nLmNvbQ==’
Data: b’codelungtung.com’

Ví dụ 2: encode/decode dữ liệu hình ảnh thành chuỗi ký tự

Input data: sunflower.jpg
import cv2
import numpy as np
import base64
import json

data = cv2.imread("sunflower.jpg")

# encode bức ảnh ban đầu và lưu vào file encodedData.txt
encodedData = json.dumps([base64.b64encode(data).decode('utf-8'), 
                          str(data.dtype), 
                          data.shape])

with open("encodedData.txt", "w") as f:
    f.write(encodedData)

# đọc dữ liệu từ file encodedData.txt và decode thành bức ảnh ban đầu
with open("encodedData.txt", "r") as f:
    encodedData = json.load(f)

data, dtype, shape = encodedData

data = np.frombuffer(base64.b64decode(data), dtype=dtype).reshape(shape)

cv2.imshow("data", data)
cv2.waitKey(0)

Output:
Sau khi thực thi đoạn script trên, file encodedData.txt chứa dữ liệu đã encode sẽ xuất hiện ở thư mục hiện tại.


Cảm ơn các bạn đã theo dõi bài viết.
Thân ái và quyết thắng.

Reference:
[1] Base64 Data Encoding.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s