Hướng dẫn how do i read a base64 file in python? - làm cách nào để đọc tệp base64 trong python?

Giả sử bạn có một tệp hình ảnh nhị phân mà bạn muốn chuyển qua một mạng. Bạn ngạc nhiên rằng tệp không được nhận đúng ở phía bên kia, tệp chỉ chứa các ký tự lạ!

Chà, có vẻ như bạn đã cố gắng gửi tệp của mình ở định dạng bit và byte thô của nó, trong khi phương tiện được sử dụng được thiết kế để phát trực tuyến văn bản.

Điều gì sẽ là cách giải quyết để tránh một vấn đề như vậy? Câu trả lời là mã hóa Base64. Trong bài viết này, tôi sẽ chỉ cho bạn cách chúng ta có thể sử dụng Python để mã hóa và giải mã một hình ảnh nhị phân. Chương trình được minh họa như một chương trình địa phương độc lập, nhưng bạn có thể áp dụng khái niệm này cho các ứng dụng khác nhau như gửi hình ảnh được mã hóa từ thiết bị di động của bạn lên máy chủ và nhiều ứng dụng khác.

Base64 là gì?

Trước khi di chuyển sâu hơn trong bài viết, hãy xác định ý nghĩa của chúng tôi là Base64.

Base64 là một cách trong đó dữ liệu nhị phân 8 bit được mã hóa thành một định dạng có thể được biểu diễn thành 6 bit. Điều này được thực hiện chỉ bằng cách sử dụng các ký tự A-Z,

01001000 01100101 01111001
0,
01001000 01100101 01111001
1,
01001000 01100101 01111001
2 và
01001000 01100101 01111001
3 để biểu diễn dữ liệu, với
01001000 01100101 01111001
4 được sử dụng để pad dữ liệu. Ví dụ, sử dụng mã hóa này, ba byte 8 bit được chuyển đổi thành bốn nhóm 6 bit.

Thuật ngữ base64 được lấy từ tiêu chuẩn tiện ích mở rộng thư (MIME) đa năng, được sử dụng rộng rãi cho HTTP và XML, và ban đầu được phát triển để mã hóa tệp đính kèm email để truyền.

Tại sao chúng ta sử dụng Base64?

Base64 rất quan trọng đối với biểu diễn dữ liệu nhị phân, do đó nó cho phép dữ liệu nhị phân được biểu diễn theo cách trông và hoạt động như văn bản đơn giản, khiến nó đáng tin cậy hơn khi được lưu trữ trong cơ sở dữ liệu, được gửi trong email hoặc được sử dụng trong văn bản dựa trên văn bản Định dạng như XML. Base64 về cơ bản được sử dụng để biểu diễn dữ liệu ở định dạng chuỗi ASCII.

Như đã đề cập trong phần giới thiệu của bài viết này, không có Base64 đôi khi dữ liệu sẽ không thể đọc được chút nào.

Base64 Mã hóa

Mã hóa Base64 là quá trình chuyển đổi dữ liệu nhị phân thành một bộ ký tự giới hạn gồm 64 ký tự. Như được hiển thị trong phần đầu tiên, những ký tự đó là A-Z,

01001000 01100101 01111001
0,
01001000 01100101 01111001
1,
01001000 01100101 01111001
2 và
01001000 01100101 01111001
3 (đếm chúng, bạn có nhận thấy chúng thêm tới 64 không?). Bộ ký tự này được coi là bộ ký tự phổ biến nhất và được gọi là Base64 của MIME. Nó sử dụng A-Z,
01001000 01100101 01111001
0 và
01001000 01100101 01111001
1 cho 62 giá trị đầu tiên và
01001000 01100101 01111001
2 và
01001000 01100101 01111001
3 cho hai giá trị cuối cùng.

Dữ liệu được mã hóa Base64 cuối cùng dài hơn dữ liệu gốc, do đó như đã đề cập ở trên, cứ 3 byte dữ liệu nhị phân, có ít nhất 4 byte dữ liệu được mã hóa base64. Điều này là do thực tế là chúng ta đang ép dữ liệu thành một bộ ký tự nhỏ hơn.

Bạn đã bao giờ thấy một phần của tệp email thô như tệp dưới đây (rất có thể bắt nguồn từ một email không được gửi)? Nếu vậy, thì bạn đã thấy mã hóa Base64 trong hành động! .

Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ
h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZhNin2LPYqtmB2LPYp9ixINi52YYg2KfZhNmF2YLYsdix
2KfYqiDYp9mE2K/Ysdin2LPZitipINin2YTYqtmKINiq2YbYtdit2YjZhiDYqNmH2Kcg2YTZhdmG
INmK2LHZitivINin2YTYqtmI2LPYuSDZgdmKDQrYt9mE2Kgg2KfZhNi52YTZhSDYp9mE2LTYsdi5
2YrYjCDYudmE2YXYpyDYqNij2YbZiiDYutmK2LEg2YXYqtiu2LXYtSDYqNin2YTYudmE2YUg2KfZ
hNi02LHYudmKINmI2KPZgdiq2YLYryDZhNmE2YXZhtmH2Kwg2KfZhNi52YTZhdmKDQrZhNiw2YTZ
gy4NCg0K2KzYstin2YPZhSDYp9mE2YTZhyDYrtmK2LHYpyDYudmE2Ykg2YbYtdit2YPZhSDZgdmK
INmH2LDYpyDYp9mE2LTYo9mGLg0KDQrYudio2K/Yp9mE2LHYrdmF2YYNCg==
--089e0141aa264e929a0514593016
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64

Base64 được thực hiện trong nhiều bước, như sau:

  • Văn bản được mã hóa theo chuyển đổi thành các giá trị thập phân tương ứng của nó, nghĩa là, thành ASCII tương đương của chúng (nghĩa là A: 97, B: 98, v.v.). Đây là bảng ASCII.
  • Các giá trị thập phân thu được trong bước trên được chuyển đổi thành các tương đương nhị phân của chúng (tức là 97: 01100001).
  • Tất cả các tương đương nhị phân được nối, có được một tập hợp lớn các số nhị phân.
  • Tập hợp lớn các số nhị phân được chia thành các phần bằng nhau, với mỗi phần chỉ chứa 6 bit.
  • Các bộ 6 bit bằng nhau được chuyển đổi thành tương đương thập phân của chúng.
  • Cuối cùng, các tương đương thập phân được chuyển đổi thành các giá trị cơ sở của chúng (tức là 4: E). Dưới đây là các giá trị thập phân và bảng chữ cái base64 của chúng.

Base64 Decoding

Giải mã base64 là đối nghịch của mã hóa base64. Nói cách khác, nó được thực hiện bằng cách đảo ngược các bước được mô tả trong phần trước.

Vì vậy, các bước của giải mã Base64 có thể được mô tả như sau:

  • Mỗi ký tự trong chuỗi được thay đổi thành giá trị thập phân base64 của nó.
  • Các giá trị thập phân thu được được chuyển đổi thành tương đương nhị phân của chúng.
  • Hai bit đầu tiên của các số nhị phân được cắt ngắn khỏi mỗi số nhị phân thu được và các bộ 6 bit được kết hợp, tạo thành một chuỗi lớn các chữ số nhị phân.
  • Chuỗi lớn các chữ số nhị phân thu được trong bước trước được chia thành các nhóm 8 bit.
  • Các số nhị phân 8 bit được chuyển đổi thành tương đương thập phân của chúng.
  • Cuối cùng, các giá trị thập phân thu được được chuyển đổi thành ASCII tương đương của chúng.

Base64 mã hóa và giải mã chuỗi

Nó sẽ trở nên dễ dàng hơn để bạn hiểu cách tất cả những điều này hoạt động một khi bạn thấy những gì đang diễn ra đằng sau hậu trường. Hãy cố gắng mã hóa và giải mã một từ ba chữ cái đơn giản,

010010 000110 010101 111001
6.

Chúng tôi bắt đầu bằng cách chuyển đổi từng chữ cái của từ thành ASCII tương đương, và sau đó chuyển đổi tương đương ASCII thành nhị phân. Điều này cho chúng ta các giá trị sau:

Bức thưGiá trị chỉ số ASCIIGiá trị nhị phân 8 bit
H72 01001000
e101 01100101
y121 01111001

Nói cách khác, chúng ta có thể viết ____ ____ 26 & nbsp; trong nhị phân như thế này:

01001000 01100101 01111001

Có tổng cộng 24 bit, khi biến thành các nhóm 6 bit, mỗi kết quả trong bốn giá trị:

010010 000110 010101 111001

Trong bảng Base64, các ký tự

010010 000110 010101 111001
8 đến
010010 000110 010101 111001
9 được biểu diễn bằng các giá trị 0 đến 25. Các ký tự
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
0 đến
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
1 được biểu diễn bằng các giá trị 26 đến 51. Các số
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
2 đến
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
3 được biểu diễn bằng các giá trị 52 đến 61. và
01001000 01100101 01111001
3 được biểu thị bằng 62 và 63. ký tự
01001000 01100101 01111001
4 được sử dụng để đệm khi các bit không thể được chia thành các nhóm 6.0 to 25. The characters
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
0 to
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
1 are represented by the values 26 to 51. The numbers
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
2 to
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
3 are represented by the values 52 to 61. The characters
01001000 01100101 01111001
2 and
01001000 01100101 01111001
3 are represented by 62 and 63. The character
01001000 01100101 01111001
4 is used for padding when the the bits can't be properly divided into groups of 6.

Bây giờ chúng tôi sẽ chuyển đổi các bit được sắp xếp lại của chúng tôi thành các giá trị số và sau đó lấy ký tự đại diện cho các giá trị số đó.

Giá trị nhị phân 6 bitGiá trị chỉ số cơ sở64Bức thư
010010 18 S
000110 6 G
010101 21 V
111001 57 5

Dựa trên các tính toán của chúng tôi ở trên, chữ cái

010010 000110 010101 111001
6 sẽ trở thành
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
8 khi base64 được mã hóa. Chúng ta có thể kiểm tra xem điều đó có đúng bằng cách sử dụng mã sau không:

from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))

Toàn bộ quá trình được thực hiện ngược lại để lấy lại dữ liệu gốc của chúng tôi sau khi giải mã Base64.

Bây giờ, tôi sẽ nhanh chóng cho bạn thấy mã hóa của một từ khác,

from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
9, để giải thích sự xuất hiện của
01001000 01100101 01111001
4 trong chuỗi được mã hóa.

Bức thưGiá trị chỉ số ASCIIGiá trị nhị phân 8 bit
H72 01001000
e101 01100101
y121 01111001
Nói cách khác, chúng ta có thể viết ____ ____ 26 & nbsp; trong nhị phân như thế này:111 01101111

Có tổng cộng 24 bit, khi biến thành các nhóm 6 bit, mỗi kết quả trong bốn giá trị:

010010 000110 010101 111001 011011 110000

Trong bảng Base64, các ký tự

010010 000110 010101 111001
8 đến
010010 000110 010101 111001
9 được biểu diễn bằng các giá trị 0 đến 25. Các ký tự
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
0 đến
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
1 được biểu diễn bằng các giá trị 26 đến 51. Các số
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
2 đến
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
3 được biểu diễn bằng các giá trị 52 đến 61. và
01001000 01100101 01111001
3 được biểu thị bằng 62 và 63. ký tự
01001000 01100101 01111001
4 được sử dụng để đệm khi các bit không thể được chia thành các nhóm 6.

Giá trị nhị phân 6 bitGiá trị chỉ số cơ sở64Bức thư
010010 18 S
000110 6 G
010101 21 V
111001 57 5
011011 27 Dựa trên các tính toán của chúng tôi ở trên, chữ cái
010010 000110 010101 111001
6 sẽ trở thành
from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
8 khi base64 được mã hóa. Chúng ta có thể kiểm tra xem điều đó có đúng bằng cách sử dụng mã sau không:
110000 48 Toàn bộ quá trình được thực hiện ngược lại để lấy lại dữ liệu gốc của chúng tôi sau khi giải mã Base64.

Bây giờ, tôi sẽ nhanh chóng cho bạn thấy mã hóa của một từ khác,

from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
9, để giải thích sự xuất hiện của
01001000 01100101 01111001
4 trong chuỗi được mã hóa.

from base64 import b64encode

text_binary = b'Heyo'

# SGV5bw==
print(b64encode(text_binary))

o

Có tổng cộng 32 bit. Điều này sẽ cung cấp cho chúng tôi năm nhóm 6 bit khác nhau, với hai bit còn sót lại:

010010 000110 010101 111001 011011 110000
1. Chúng tôi đệm chúng với
010010 000110 010101 111001 011011 110000
2 để có được một nhóm 6 bit. Tạo các nhóm 6 bit từ sự sắp xếp trên sẽ cung cấp cho bạn những điều sau đây:

Các bit được sắp xếp lại sẽ cung cấp cho bạn các ký tự sau dựa trên các giá trị chỉ mục cơ sở64.deer.gif.)

Hướng dẫn how do i read a base64 file in python? - làm cách nào để đọc tệp base64 trong python?

b

010010 000110 010101 111001 011011 110000
7

w

Điều này có nghĩa là giá trị được mã hóa base64 của chúng tôi cho

from base64 import b64encode

text_binary = b'Hey'

# SGV5
print(b64encode(text_binary))
9 sẽ là
010010 000110 010101 111001 011011 110000
4. Mỗi
01001000 01100101 01111001
4 đại diện cho một cặp
010010 000110 010101 111001 011011 110000
6 mà chúng tôi đã thêm vào để đệm chuỗi bit ban đầu.

Base64 mã hóa một hình ảnh

import base64 
image = open('deer.gif', 'rb') #open binary file in read mode
image_read = image.read()
image_64_encode = base64.b64encode(image_read)

Bây giờ chúng ta hãy đến với phần thịt của bài viết này. Trong phần này, tôi sẽ chỉ cho bạn làm thế nào chúng ta có thể dễ dàng mã hóa một hình ảnh bằng Python.

from base64 import b64encode

text_binary = b'Heyo'

# SGV5bw==
print(b64encode(text_binary))
0

Tôi sẽ sử dụng hình ảnh nhị phân sau đây. Hãy tiếp tục và tải xuống nó, và hãy để Python lăn! (Tôi cho rằng tên của hình ảnh là Deer.gif.)

Điều đầu tiên chúng ta phải làm để sử dụng Base64 trong Python là nhập mô -đun Base64:

Để mã hóa hình ảnh, chúng tôi chỉ cần sử dụng hàm

010010 000110 010101 111001 011011 110000
8. Python mô tả chức năng như sau:

Mã hóa đối tượng giống như byte

010010 000110 010101 111001 011011 110000
9 bằng base64 và trả về các byte được mã hóa.

from base64 import b64encode

text_binary = b'Heyo'

# SGV5bw==
print(b64encode(text_binary))
2

Do đó, chúng tôi có thể làm như sau để Base64 mã hóa hình ảnh của chúng tôi:

Nếu bạn muốn xem đầu ra của quá trình mã hóa, hãy nhập như sau:

import base64
image = open('deer.gif', 'rb')
image_read = image.read()
image_64_encode = base64.b64encode(image_read)
image_64_decode = base64.b64decode(image_64_encode) 
image_result = open('deer_decode.gif', 'wb') # create a writable image and write the decoding result
image_result.write(image_64_decode)

Base64 giải mã một hình ảnhdeer_decode.gif, which you have on your desktop, you will notice that you have the original image deer.gif we encoded in the first step.

Để giải mã một hình ảnh bằng Python, chúng tôi chỉ cần sử dụng hàm

from base64 import b64encode

text_binary = b'Heyo'

# SGV5bw==
print(b64encode(text_binary))
1. Python đề cập đến những điều sau đây về chức năng này:

Giải mã base64 được mã hóa đối tượng giống như byte hoặc chuỗi ASCII s và trả về các byte được giải mã.

Vì vậy, để giải mã hình ảnh chúng tôi đã mã hóa trong phần trước, chúng tôi làm như sau:

Để tất cả chúng cùng nhau

Hãy để Lừa đặt chương trình cho mã hóa Base64 và giải mã một hình ảnh với nhau. Kịch bản Python làm điều đó trông giống như sau:

import base64

image = open('dot.jpg', 'rb')
image_data = image.read()

unsafe_encode = base64.b64encode(image_data)
safe_encode = base64.urlsafe_b64encode(image_data)

# b'/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNr....
print(unsafe_encode)

# b'_9j_4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP_sABFEdWNr....
print(safe_encode)

Nếu bạn mở Deer_decode.gif mà bạn có trên máy tính để bàn của mình, bạn sẽ nhận thấy rằng bạn có hình ảnh gốc Deer.gif chúng tôi đã mã hóa trong bước đầu tiên.

Như chúng ta đã thấy từ bài viết này, Python làm cho nó rất dễ dàng để thực hiện những gì dường như là một nhiệm vụ phức tạp.

Bài đăng này đã được cập nhật với sự đóng góp từ Nitish Kumar. Nitish là một nhà phát triển web có kinh nghiệm trong việc tạo ra các trang web thương mại điện tử trên các nền tảng khác nhau. Anh ấy dành thời gian rảnh rỗi để làm việc cho các dự án cá nhân giúp cuộc sống hàng ngày của anh ấy dễ dàng hơn hoặc đi dạo buổi tối dài với bạn bè.

Bạn có thấy bài đăng này hữu ích?

Hướng dẫn how do i read a base64 file in python? - làm cách nào để đọc tệp base64 trong python?

Tiến sĩ Aber-Rahman Ali là một nhà nghiên cứu sử dụng máy học và xử lý hình ảnh trong phân tích hình ảnh y tế. Anh ấy cũng thích viết về Python!

Tập lệnh Python sử dụng lệnh nào để giải mã Base64?

Chỉ cần sử dụng Base64.b64Decode (B64STR) và lưu trữ nó dưới dạng resstr.(Tùy chọn) In resstr.base64. b64decode(b64Str) and store it as resStr. ( Optional ) Print resStr.

Có thể giải mã base64 không?

Bạn có thể giải mã các giá trị base64 thành byte (vì vậy chỉ là một chuỗi các bit).Và từ đó, bạn cần biết những gì các byte này đại diện và mã hóa ban đầu mà chúng được đại diện, nếu bạn muốn chuyển đổi chúng một lần nữa sang định dạng dễ đọc. (so just a sequence of bits). And from there, you need to know what these bytes represent and what original encoding they were represented in, if you wish to convert them again to a legible format.

== có nghĩa là gì trong base64?

Khi giải mã văn bản base64, bốn ký tự thường được chuyển đổi thành ba byte.Ngoại lệ duy nhất là khi các ký tự đệm tồn tại.Một = chỉ ra rằng bốn ký tự sẽ giải mã chỉ hai byte, trong khi == chỉ ra rằng bốn ký tự sẽ giải mã thành một byte duy nhất.indicates that the four characters will decode to only a single byte.