Hướng dẫn how do i encode base64 in python? - làm cách nào để mã hóa base64 trong python?

Giới thiệu

Bạn đã bao giờ nhận được một tệp PDF hoặc một tệp hình ảnh từ ai đó qua email, chỉ để xem các ký tự lạ khi bạn mở nó? Điều này có thể xảy ra nếu máy chủ email của bạn chỉ được thiết kế để xử lý dữ liệu văn bản. Các tệp có dữ liệu nhị phân, byte đại diện cho thông tin không phải là hình ảnh như hình ảnh, có thể dễ dàng bị hỏng khi được chuyển và xử lý sang các hệ thống chỉ có văn bản.

Mã hóa Base64 cho phép chúng tôi chuyển đổi các byte chứa dữ liệu nhị phân hoặc văn bản sang các ký tự ASCII. Bằng cách mã hóa dữ liệu của chúng tôi, chúng tôi cải thiện cơ hội được xử lý chính xác bởi các hệ thống khác nhau.

Trong hướng dẫn này, chúng tôi sẽ tìm hiểu cách mã hóa và giải mã Base64 và cách sử dụng nó. Sau đó, chúng tôi sẽ sử dụng mã hóa Python đến Base64 và giải mã cả dữ liệu văn bản và dữ liệu nhị phân.

Base64 mã hóa là gì?

Mã hóa Base64 là một loại chuyển đổi byte thành các ký tự ASCII. Trong toán học, cơ sở của một hệ thống số đề cập đến số lượng ký tự khác nhau đại diện cho số. Tên của mã hóa này xuất phát trực tiếp từ định nghĩa toán học của các cơ sở - chúng tôi có 64 ký tự đại diện cho số.

Bộ ký tự Base64 chứa:

  • 26 chữ hoa
  • 26 chữ cái chữ thường
  • 10 số
  • 010100 000111 100101 110100 011010 000110 111101 101110
    
    1 và
    010100 000111 100101 110100 011010 000110 111101 101110
    
    2 cho các dòng mới (một số triển khai có thể sử dụng các ký tự khác nhau)

Khi máy tính chuyển đổi các ký tự base64 thành nhị phân, mỗi ký tự base64 đại diện cho 6 bit thông tin.

Lưu ý: Đây không phải là thuật toán mã hóa và không nên được sử dụng cho mục đích bảo mật. This is not an encryption algorithm, and should not be used for security purposes.

Bây giờ chúng ta đã biết mã hóa Base64 nào và cách nó được thể hiện trên máy tính, chúng ta hãy nhìn sâu hơn về cách thức hoạt động của nó.

Mã hóa Base64 hoạt động như thế nào?

Chúng tôi sẽ minh họa cách mã hóa Base64 hoạt động bằng cách chuyển đổi dữ liệu văn bản, vì nó tiêu chuẩn hơn so với các định dạng nhị phân khác nhau để lựa chọn. Nếu chúng tôi đã mã hóa Base64, chúng tôi sẽ làm theo các bước sau:

  1. Lấy giá trị ASCII của mỗi ký tự trong chuỗi
  2. Tính toán nhị phân 8 bit tương đương với các giá trị ASCII
  3. Chuyển đổi các khối 8 bit thành các khối 6 bit bằng cách chỉ nhóm lại các chữ số
  4. Chuyển đổi các nhóm nhị phân 6 bit thành các giá trị thập phân tương ứng của chúng.
  5. Sử dụng bảng mã hóa Base64, gán ký tự base64 tương ứng cho mỗi giá trị thập phân.

Hãy xem cách nó hoạt động bằng cách chuyển đổi chuỗi "Python" thành chuỗi base64.

Các giá trị ASCII của các ký tự

010100 000111 100101 110100 011010 000110 111101 101110
3 lần lượt là
010100 000111 100101 110100 011010 000110 111101 101110
4. Chúng ta có thể biểu diễn các giá trị ASCII này trong nhị phân 8 bit như sau:

01010000 01111001 01110100 01101000 01101111 01101110

Hãy nhớ lại rằng các ký tự Base64 chỉ đại diện cho 6 bit dữ liệu. Bây giờ chúng tôi nhóm lại các chuỗi nhị phân 8 bit thành các khối 6 bit. Các nhị phân kết quả sẽ trông như thế này:

010100 000111 100101 110100 011010 000110 111101 101110

Lưu ý: Đôi khi chúng tôi không thể nhóm dữ liệu thành các chuỗi 6 bit. Nếu điều đó xảy ra, chúng ta phải đệm trình tự. Sometimes we are not able to group the data into sequences of 6 bits. If that occurs, we have to pad the sequence.

Với dữ liệu của chúng tôi trong các nhóm 6 bit, chúng tôi có thể thu được giá trị thập phân cho mỗi nhóm. Sử dụng kết quả cuối cùng của chúng tôi, chúng tôi nhận được các giá trị thập phân sau:

20 7 37 52 26 6 61 46

Cuối cùng, chúng tôi sẽ chuyển đổi các số thập phân này thành ký tự base64 thích hợp bằng cách sử dụng bảng chuyển đổi Base64:

Như bạn có thể thấy, giá trị

010100 000111 100101 110100 011010 000110 111101 101110
5 tương ứng với chữ cái
010100 000111 100101 110100 011010 000110 111101 101110
6. Sau đó, chúng tôi nhìn vào
010100 000111 100101 110100 011010 000110 111101 101110
7 và quan sát nó được ánh xạ tới
010100 000111 100101 110100 011010 000110 111101 101110
8. Tiếp tục tra cứu này cho tất cả các giá trị thập phân, chúng ta có thể xác định rằng "python" được biểu diễn dưới dạng
010100 000111 100101 110100 011010 000110 111101 101110
9 khi base64 được mã hóa. Bạn có thể xác minh kết quả này với một bộ chuyển đổi trực tuyến.

Để base64 mã hóa một chuỗi, chúng tôi chuyển đổi nó thành các chuỗi nhị phân, sau đó thành các chuỗi thập phân và cuối cùng, sử dụng bảng tra cứu để có được một chuỗi các ký tự ASCII. Với sự hiểu biết sâu sắc hơn về cách thức hoạt động của nó, chúng ta hãy xem tại sao chúng ta sẽ mã hóa dữ liệu của chúng ta.

Tại sao sử dụng mã hóa Base64?

Trong máy tính, tất cả dữ liệu của các loại khác nhau được truyền là 1 và 0. Tuy nhiên, một số kênh truyền thông và ứng dụng không thể hiểu tất cả các bit mà nó nhận được. Điều này là do ý nghĩa của chuỗi 1 và 0 phụ thuộc vào loại dữ liệu mà nó đại diện. Ví dụ,

20 7 37 52 26 6 61 46
0 phải được xử lý khác nhau nếu nó đại diện cho một chữ cái hoặc một hình ảnh.

Để làm việc xung quanh giới hạn này, bạn có thể mã hóa dữ liệu của mình thành văn bản, cải thiện cơ hội của nó được truyền và xử lý chính xác. Base64 là một phương pháp phổ biến để đưa dữ liệu nhị phân vào các ký tự ASCII, được đa số các mạng và ứng dụng được hiểu rộng rãi.

Một kịch bản trong thế giới thực phổ biến trong đó mã hóa Base64 được sử dụng rất nhiều trong các máy chủ thư. Chúng ban đầu được xây dựng để xử lý dữ liệu văn bản, nhưng chúng tôi cũng hy vọng chúng sẽ gửi hình ảnh và phương tiện khác với một thông báo. Trong những trường hợp đó, dữ liệu phương tiện của bạn sẽ được mã hóa base64 khi nó được gửi. Sau đó, nó sẽ được giải mã Base64 khi nhận được để một ứng dụng có thể sử dụng nó. Vì vậy, ví dụ, hình ảnh trong HTML có thể trông như thế này:

<img src="data:image/png;base64,aVRBOw0AKg1mL9...">

Hiểu rằng dữ liệu đôi khi cần được gửi dưới dạng văn bản để nó không bị hỏng, chúng ta hãy xem cách chúng ta có thể sử dụng dữ liệu được mã hóa và giải mã Python to Base64.

Chuỗi mã hóa với Python

Python 3 cung cấp một mô -đun

20 7 37 52 26 6 61 46
1 cho phép chúng tôi dễ dàng mã hóa và giải mã thông tin. Trước tiên chúng tôi chuyển đổi chuỗi thành một đối tượng giống như byte. Sau khi chuyển đổi, chúng ta có thể sử dụng mô -đun
20 7 37 52 26 6 61 46
1 để mã hóa nó.

Trong một tệp mới

20 7 37 52 26 6 61 46
3, hãy nhập thông tin sau:

import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

Trong mã trên, trước tiên chúng tôi nhập mô -đun

20 7 37 52 26 6 61 46
1. Biến
20 7 37 52 26 6 61 46
5 lưu trữ chuỗi đầu vào của chúng tôi sẽ được mã hóa. Chúng tôi chuyển đổi nó thành một đối tượng giống như byte bằng phương thức
20 7 37 52 26 6 61 46
6 của chuỗi và lưu trữ nó trong
20 7 37 52 26 6 61 46
7. Sau đó, chúng tôi mã hóa Base64
20 7 37 52 26 6 61 46
7 và lưu trữ kết quả trong
20 7 37 52 26 6 61 46
9 bằng phương pháp
<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
0. Cuối cùng chúng tôi nhận được biểu diễn chuỗi của chuyển đổi Base64 bằng cách giải mã
20 7 37 52 26 6 61 46
9 là ASCII.

Lưu ý: Hãy chắc chắn sử dụng cùng một định dạng mã hóa thành khi chuyển đổi từ chuỗi sang byte và từ byte sang chuỗi. Điều này ngăn chặn tham nhũng dữ liệu. Be sure to use the same encoding format to when converting from string to bytes, and from bytes to string. This prevents data corruption.

Chạy tệp này sẽ cung cấp đầu ra sau:

$ python3 encoding_text.py
UHl0aG9uIGlzIGZ1bg==

Bây giờ chúng ta hãy xem làm thế nào chúng ta có thể giải mã một chuỗi base64 thành biểu diễn thô của nó.

Chuỗi giải mã với Python

Giải mã một chuỗi base64 về cơ bản là một mặt trái của quá trình mã hóa. Chúng tôi giải mã chuỗi base64 thành byte dữ liệu không được mã hóa. Sau đó chúng tôi chuyển đổi đối tượng giống như byte thành một chuỗi.

Trong một tệp mới có tên

<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
2, hãy viết mã sau:

import base64

base64_message = 'UHl0aG9uIGlzIGZ1bg=='
base64_bytes = base64_message.encode('ascii')
message_bytes = base64.b64decode(base64_bytes)
message = message_bytes.decode('ascii')

print(message)

Một lần nữa, chúng tôi cần mô -đun

20 7 37 52 26 6 61 46
1 được nhập. Sau đó, chúng tôi mã hóa thông điệp của chúng tôi thành một đối tượng giống như byte với
<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
4. Chúng tôi tiếp tục bằng cách gọi phương thức
<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
5 để giải mã
20 7 37 52 26 6 61 46
9 vào biến
20 7 37 52 26 6 61 46
7 của chúng tôi. Cuối cùng, chúng tôi giải mã
20 7 37 52 26 6 61 46
7 thành một đối tượng chuỗi
20 7 37 52 26 6 61 46
5, vì vậy nó trở nên dễ đọc.

Chạy tệp này để xem đầu ra sau:

$ python3 decoding_text.py
Python is fun

Bây giờ chúng ta có thể mã hóa và giải mã dữ liệu chuỗi, chúng ta hãy cố gắng mã hóa dữ liệu nhị phân.

Mã hóa dữ liệu nhị phân với Python

Như chúng tôi đã đề cập trước đây, mã hóa Base64 chủ yếu được sử dụng để biểu diễn dữ liệu nhị phân làm văn bản. Trong Python, chúng ta cần đọc tệp nhị phân và base64 mã hóa byte của nó để chúng ta có thể tạo chuỗi được mã hóa của nó.

Hãy xem cách chúng ta có thể mã hóa hình ảnh này:

Tạo một tệp mới

import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
0 và thêm thông tin sau:

import base64

with open('logo.png', 'rb') as binary_file:
    binary_file_data = binary_file.read()
    base64_encoded_data = base64.b64encode(binary_file_data)
    base64_message = base64_encoded_data.decode('utf-8')

    print(base64_message)

Chúng ta hãy đi qua đoạn mã ở trên. Chúng tôi mở tệp bằng

import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
1. Lưu ý cách chúng tôi vượt qua đối số
import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
2 cùng với đường dẫn tệp - điều này cho Python biết rằng chúng tôi đang đọc một tệp nhị phân. Không cần sử dụng
import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
2, Python sẽ cho rằng chúng tôi đang đọc một tệp văn bản.

Sau đó, chúng tôi sử dụng phương thức

import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
4 để lấy tất cả dữ liệu trong tệp vào biến
import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
5. Tương tự như cách chúng tôi xử lý các chuỗi, chúng tôi đã mã hóa các byte với
<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
0 và sau đó sử dụng
import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
7 trên
import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
8 để lấy dữ liệu được mã hóa base64 bằng các ký tự có thể đọc được của con người.

Thực hiện mã sẽ tạo ra đầu ra tương tự như:

$ python3 encoding_binary.py
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB1klEQVQ4jY2TTUhUURTHf+fy/HrjhNEX2KRGiyIXg8xgSURuokXLxFW0qDTaSQupkHirthK0qF0WQQQR0UCbwCQyw8KCiDbShEYLJQdmpsk3895p4aSv92ass7pcfv/zP+fcc4U6kXKe2pTY3tjSUHjtnFgB0VqchC/SY8/293S23f+6VEj9KKwCoPDNIJdmr598GOZNJKNWTic7tqb27WwNuuwGvVWrAit84fsmMzE1P1+1TiKMVKvYUjdBvzPZXCwXzyhyWNBgVYkgrIow09VJMznpyebWE+Tdn9cEroBSc1JVPS+6moh5Xyjj65vEgBxafGzWetTh+rr1eE/c/TMYg8hlAOvI6JP4KmwLgJ4qD0TIbliTB+sunjkbeLekKsZ6Zc8V027aBRoBRHVoduDiSypmGFG7CrcBEyDHA0ZNfNphC0D6amYa6ANw3YbWD4Pn3oIc+EdL36V3od0A+MaMAXmA8x2Zyn+IQeQeBDfRcUw3B+2PxwZ/EdtTDpCPQLMh9TKx0k3pXipEVlknsf5KoNzGyOe1sz8nvYtTQT6yyvTjIaxsmHGB9pFx4n3jIEfDePQvCIrnn0J4B/gA5J4XcRfu4JZuRAw3C51OtOjM3l2bMb8Br5eXCsT/w/EAAAAASUVORK5CYII=

Đầu ra của bạn có thể thay đổi tùy thuộc vào hình ảnh bạn đã chọn để mã hóa.

Bây giờ chúng ta đã biết cách BAS64 mã hóa dữ liệu nhị phân trong Python, chúng ta hãy di chuyển trên base64 giải mã dữ liệu nhị phân.

Giải mã dữ liệu nhị phân với Python

Base64 Decoding nhị phân tương tự như dữ liệu văn bản giải mã Base64. Sự khác biệt chính là sau khi chúng tôi giải mã chuỗi, chúng tôi lưu dữ liệu dưới dạng tệp nhị phân thay vì một chuỗi.

Hãy xem cách giải mã Base64 trong thực tế bằng cách tạo một tệp mới có tên

import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
9. Nhập mã sau vào tệp Python:

010100 000111 100101 110100 011010 000110 111101 101110
0

Trong mã trên, trước tiên chúng tôi chuyển đổi dữ liệu chuỗi Base64 của chúng tôi thành một đối tượng giống như byte có thể được giải mã. Khi bạn là Base64 giải mã một tệp nhị phân, bạn phải biết loại dữ liệu đang được giải mã. Ví dụ: dữ liệu này chỉ hợp lệ dưới dạng tệp PNG và không phải là tệp MP3 vì nó mã hóa một hình ảnh.must know the type of data that is being decoded. For example, this data is only valid as a PNG file and not a MP3 file as it encodes an image.

Khi tệp đích được mở, chúng tôi base64 giải mã dữ liệu bằng

$ python3 encoding_text.py
UHl0aG9uIGlzIGZ1bg==
0, một phương thức khác với
<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
5 được sử dụng với các chuỗi. Phương pháp này nên được sử dụng để giải mã dữ liệu nhị phân. Cuối cùng, chúng tôi viết dữ liệu được giải mã vào một tệp.

Trong cùng một thư mục mà bạn đã thực thi

import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)
9, giờ đây bạn sẽ thấy một tệp
$ python3 encoding_text.py
UHl0aG9uIGlzIGZ1bg==
3 mới có chứa hình ảnh gốc được mã hóa trước đó.

Sự kết luận

Mã hóa Base64 là một kỹ thuật phổ biến để chuyển đổi dữ liệu ở các định dạng nhị phân khác nhau thành một chuỗi các ký tự ASCII. Điều này rất hữu ích khi truyền dữ liệu đến các mạng hoặc ứng dụng không thể xử lý dữ liệu nhị phân thô nhưng sẽ dễ dàng xử lý văn bản.

Với Python, chúng ta có thể sử dụng mô -đun

20 7 37 52 26 6 61 46
1 để mã hóa Base64 và giải mã dữ liệu văn bản và nhị phân.

Những ứng dụng nào bạn sẽ sử dụng để mã hóa và giải mã dữ liệu Base64?

Làm cách nào để mã hóa trong base64?

Các bước để mã hóa một chuỗi với thuật toán Base64 như sau:..
Đếm số lượng ký tự trong một chuỗi. ....
Chuyển đổi chuỗi thành định dạng nhị phân ASCII 8 bit bằng bảng ASCII ..
Sau khi chuyển đổi thành định dạng nhị phân, chia dữ liệu nhị phân thành các khối 6 bit ..
Chuyển đổi các khối dữ liệu nhị phân 6 bit thành số thập phân ..

Làm cách nào để đọc một tệp Base64 trong Python?

Nhập base64 và codec ..
Chuyển đổi chuỗi thành B "" bằng cách sử dụng codec.Encode (...) và lưu trữ nó dưới dạng biến (B64ST ở đây).
Đơn giản 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 ..

Ví dụ mã hóa Base64 là gì?

Base64 sử dụng các ký tự 6 bit được nhóm thành các chuỗi 24 bit.Ví dụ: hãy xem xét câu hi \ n, trong đó \ n đại diện cho một dòng mới.Bước đầu tiên trong quá trình mã hóa là có được biểu diễn nhị phân của từng ký tự ASCII.Điều này có thể được thực hiện bằng cách tìm kiếm các giá trị trong bảng chuyển đổi ASCII sang nhị phân.Hi\n, where the \n represents a newline. The first step in the encoding process is to obtain the binary representation of each ASCII character. This can be done by looking up the values in an ASCII-to-binary conversion table.

Làm cách nào để giải mã chuỗi cơ sở 64?

Để giải mã với Base64, bạn cần sử dụng cờ -mã hóa.Với chuỗi được mã hóa, bạn có thể đặt một lệnh Echo vào base64 như bạn đã làm để mã hóa nó.use the --decode flag. With encoded string, you can pipe an echo command into base64 as you did to encode it.