Cách dùng Base64 trong Python: mã hóa/giải mã chuỗi, ảnh

1. Base64 là gì? Cách sử dụng cơ bản trong Python

Base64 là gì? Base64 là một phương pháp để mã hóa dữ liệu nhị phân thành dạng văn bản. Đặc biệt được dùng trong email, URL và truyền thông web, nhằm truyền dữ liệu nhị phân một cách an toàn. Công nghệ này cho phép mã hóa hình ảnh và tệp, giúp trao đổi an toàn ở dạng văn bản. Ưu điểm khi dùng Base64 trong Python Trong Python, bằng cách sử dụng thư viện chuẩn base64, bạn có thể mã hóa và giải mã Base64 một cách dễ dàng mà không cần cài đặt thêm. Mã dưới đây minh họa cách mã hóa một chuỗi sang dạng Base64, rồi giải mã để khôi phục lại như ban đầu.
import base64

# Dữ liệu cần mã hóa
data = "Xin chào"
encoded_data = base64.b64encode(data.encode('utf-8'))
print(encoded_data)  # b'44GT44KT44Gr44Gh44Gv'

# Giải mã để trả về dữ liệu ban đầu
decoded_data = base64.b64decode(encoded_data).decode('utf-8')
print(decoded_data)  # Xin chào
  • Hàm b64encode() mã hóa một dãy byte sang dạng Base64. encode('utf-8') được dùng để chuyển đổi chuỗi thành dãy byte.
  • Hàm b64decode() giải mã dữ liệu đã được mã hóa và trả về chuỗi ban đầu.

2. Các bước thực hiện mã hóa Base64 với Python

Mã hóa chuỗi Mã hóa Base64 được thực hiện sau khi chuyển văn bản hay dữ liệu sang chuỗi byte. Đoạn mã dưới đây cho thấy cách mã hóa một chuỗi trong Python.
import base64

# Mã hóa chuỗi
text = "Python Base64"
encoded_text = base64.b64encode(text.encode('utf-8'))
print(encoded_text)  # b'UHl0aG9u IEJhc2U2NA=='
Giải thích: encode('utf-8') được dùng để chuyển chuỗi thành chuỗi byte, và b64encode() để mã hóa Base64. Dữ liệu đã mã hóa sẽ được hiển thị dưới dạng chuỗi byte.
侍エンジニア塾

3. Cơ chế giải mã Base64 và ví dụ minh họa

Cách khôi phục dữ liệu đã được mã hóa về ban đầu Tiếp theo là một ví dụ giải mã dữ liệu đã được mã hóa Base64 để trả về chuỗi ban đầu.
import base64

# Dữ liệu đã được mã hóa Base64
encoded_data = b'UHl0aG9uIGlzIGdyZWF0'
# Giải mã để trả về chuỗi ban đầu
decoded_data = base64.b64decode(encoded_data).decode('utf-8')
print(decoded_data)  # Python is great
Điểm mấu chốt: Dữ liệu sau khi giải mã được trả về dưới dạng dãy byte, vì vậy hãy dùng decode('utf-8') để chuyển về chuỗi ký tự. Nhờ vậy, bạn có thể khôi phục chuỗi đã mã hóa về định dạng ban đầu.

4. Cách mã hóa và giải mã Base64 cho tệp ảnh trong Python

Chuyển đổi tệp ảnh sang định dạng Base64 Base64 có thể mã hóa cả dữ liệu nhị phân như tệp ảnh. Ví dụ dưới đây giới thiệu cách mã hóa tệp ảnh sang Base64 và lưu dưới dạng văn bản.
import base64

# Đọc tệp ảnh và mã hóa sang Base64
with open('image.png', 'rb') as img_file:
    encoded_image = base64.b64encode(img_file.read())
    print(encoded_image)
Cách khôi phục tệp ảnh về dạng ban đầu Dưới đây là đoạn mã giải mã tệp ảnh đã được mã hóa và chuyển nó trở lại định dạng hình ảnh.
import base64

# Dữ liệu ảnh đã được mã hóa
encoded_image = b'...'  # Dữ liệu đã mã hóa

# Giải mã và lưu thành tệp ảnh
with open('decoded_image.png', 'wb') as img_file:
    img_file.write(base64.b64decode(encoded_image))
Giải thích: Sử dụng b64encode() để mã hóa ảnh và b64decode() để giải mã, bạn có thể khôi phục dữ liệu về dạng nhị phân.
侍エンジニア塾

5. Các ví dụ ứng dụng thực tế của Base64

Ví dụ sử dụng trong ứng dụng web Base64 rất hữu ích khi trao đổi dữ liệu trong các ứng dụng web và API. Ví dụ: đây là một API chuyển đổi hình ảnh sang định dạng Base64 và trả về dưới dạng phản hồi JSON.
from flask import Flask, jsonify
import base64

app = Flask(__name__)

@app.route('/image')
def get_image():
    with open('image.png', 'rb') as image_file:
        encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
    return jsonify({'image': encoded_image})

if __name__ == '__main__':
    app.run(debug=True)
API này là một ví dụ đơn giản về việc mã hóa hình ảnh bằng Base64 và trả về ở dạng JSON. Trong các ứng dụng web, điều này hữu ích khi lưu hình ảnh vào cơ sở dữ liệu hoặc trao đổi dữ liệu hình ảnh qua giao tiếp API.

6. Lưu ý và hạn chế của mã hóa Base64

Sự gia tăng kích thước dữ liệu Mã hóa Base64 có nhược điểm là kích thước dữ liệu tăng khoảng 33%. Điều này là do Base64 chuyển đổi 3 byte dữ liệu thành 4 byte văn bản. Ví dụ, một hình ảnh 1MB khi được mã hóa Base64 sẽ thành 1.33MB. Ví dụ cụ thể về việc tăng kích thước dữ liệu Khi mã hóa một tệp 100KB, nó sẽ thành khoảng 133KB. Nếu thường xuyên trao đổi các tệp dung lượng lớn, điều này sẽ ảnh hưởng đến tốc độ truyền và không gian lưu trữ, vì vậy việc kết hợp tối ưu hóa và các kỹ thuật nén là quan trọng.

Tổng kết

Trong bài viết này, chúng tôi đã trình bày cách mã hóa và giải mã Base64 trong Python, các ví dụ ứng dụng thực tế, cũng như ưu nhược điểm của mã hóa Base64. Base64 là một công nghệ rất hữu ích trong việc truyền tải và lưu trữ dữ liệu, đặc biệt được sử dụng rộng rãi trong các ứng dụng web và API. Tuy nhiên, cần cân nhắc hạn chế là kích thước dữ liệu tăng và sử dụng nó trong những tình huống phù hợp. Hãy tận dụng công nghệ này trong các dự án sắp tới.