Hướng dẫn convert base64 bytes to string python - chuyển đổi byte base64 thành chuỗi python

Tôi không thể tìm thấy một câu trả lời hợp lý hoạt động để chuyển đổi byte thành chuỗi được mã hóa urlsafe B64, vì vậy việc đăng giải pháp của tôi ở đây.

Giả sử bạn có một đầu vào:

mystring = b'\xab\x8c\xd3\x1fw\xbb\xaaz\xef\x0e\xcb|\xf0\xc3\xdfx=\x16\xeew7\xffU\ri/#\xcf0\x8a2\xa0'

Mã hóa thành Base64base64

from base64 import b64encode # or urlsafe_b64decode
b64_mystring = b64encode(mystring) 

Điều này cung cấp:

from base64 import b64encode # or urlsafe_b64decode
b64_mystring = b64encode(mystring) 
5 vẫn cần giải mã, vì byte không phải là serializable.

import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"

Do đó chúng tôi sử dụng:

from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")

Điều này mang lại cho chúng ta:

from base64 import b64encode # or urlsafe_b64decode
b64_mystring = b64encode(mystring) 
6

bây giờ là JSON serializable (sử dụng

from base64 import b64encode # or urlsafe_b64decode
b64_mystring = b64encode(mystring) 
7).

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ố
  • from base64 import b64encode # or urlsafe_b64decode
    b64_mystring = b64encode(mystring) 
    
    8 và
    from base64 import b64encode # or urlsafe_b64decode
    b64_mystring = b64encode(mystring) 
    
    9 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ự

import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
0 lần lượt là
import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
1. 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ị

import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
2 tương ứng với chữ cái
import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
3. Sau đó, chúng tôi nhìn vào
import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
4 và quan sát nó được ánh xạ tới
import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
5. 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
import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
6 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ụ,

import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
7 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

import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
8 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
import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
8 để mã hóa nó.

Trong một tệp mới

from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
0, 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

import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
8. Biến
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
2 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
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
3 của chuỗi và lưu trữ nó trong
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
4. Sau đó, chúng tôi mã hóa Base64
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
4 và lưu trữ kết quả trong
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
6 bằng phương pháp
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
7. 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ã
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
6 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

from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
9, hãy viết mã sau:

from base64 import b64encode # or urlsafe_b64decode
b64_mystring = b64encode(mystring) 
0

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

import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
8 đượ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
01010000 01111001 01110100 01101000 01101111 01101110
1. Chúng tôi tiếp tục bằng cách gọi phương thức
01010000 01111001 01110100 01101000 01101111 01101110
2 để giải mã
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
6 vào biến
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
4 của chúng tôi. Cuối cùng, chúng tôi giải mã
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
4 thành một đối tượng chuỗi
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
2, do đó nó trở nên dễ đọc.

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

from base64 import b64encode # or urlsafe_b64decode
b64_mystring = b64encode(mystring) 
1

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

01010000 01111001 01110100 01101000 01101111 01101110
7 và thêm thông tin sau:

from base64 import b64encode # or urlsafe_b64decode
b64_mystring = b64encode(mystring) 
2

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

01010000 01111001 01110100 01101000 01101111 01101110
8. Lưu ý cách chúng tôi vượt qua đối số
01010000 01111001 01110100 01101000 01101111 01101110
9 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
01010000 01111001 01110100 01101000 01101111 01101110
9, 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

010100 000111 100101 110100 011010 000110 111101 101110
1 để lấy tất cả dữ liệu trong tệp vào biến
010100 000111 100101 110100 011010 000110 111101 101110
2. 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
from base64 import b64encode
b64_mystring = b64encode(mystring).decode("utf-8")
7 và sau đó sử dụng
010100 000111 100101 110100 011010 000110 111101 101110
4 trên
010100 000111 100101 110100 011010 000110 111101 101110
5 để 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ư:

from base64 import b64encode # or urlsafe_b64decode
b64_mystring = b64encode(mystring) 
3

Đầ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

010100 000111 100101 110100 011010 000110 111101 101110
6. Nhập mã sau vào tệp Python:

from base64 import b64encode # or urlsafe_b64decode
b64_mystring = b64encode(mystring) 
4

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

010100 000111 100101 110100 011010 000110 111101 101110
7, một phương thức khác với
01010000 01111001 01110100 01101000 01101111 01101110
2 đượ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

010100 000111 100101 110100 011010 000110 111101 101110
6, giờ đây bạn sẽ thấy một tệp
20 7 37 52 26 6 61 46
0 mới 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

import requests
requests.get("https://google.com", json={"this": b64_mystring})

# raises "TypeError: Object of type bytes is not JSON serializable"
8 để 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?

Base64 B64Decode trong Python là gì?

B64Decode () trong Python. Với sự trợ giúp của Base64. Phương thức B64Decode (), chúng ta có thể giải mã chuỗi nhị phân thành dạng bình thường. Trả về: Trả về chuỗi được giải mã.decode the binary string into normal form. Return : Return the decoded string.

B64encode Python là gì?

B64encode (s, altchars = none) mã hóa đối tượng giống như byte bằng base64 và trả về các byte được mã hóa.Altchars tùy chọn phải là một đối tượng giống như byte có độ dài ít nhất 2 (các ký tự bổ sung bị bỏ qua) chỉ định bảng chữ cái thay thế cho + và / ký tự.Encode the bytes-like object s using Base64 and return the encoded bytes . Optional altchars must be a bytes-like object of at least length 2 (additional characters are ignored) which specifies an alternative alphabet for the + and / characters.

Base64 có phải là một chuỗi không?

Base64 là một sơ đồ mã hóa nhị phân cho văn bản đại diện cho dữ liệu nhị phân ở định dạng chuỗi ASCII.Base64 được thiết kế để mang dữ liệu được lưu trữ ở định dạng nhị phân trên các kênh.Nó lấy bất kỳ hình thức dữ liệu nào và biến nó thành một chuỗi dài của văn bản thuần túy.. base64 is designed to carry data stored in binary format across the channels. It takes any form of data and transforms it into a long string of plain text.

Sự khác biệt giữa Base64 và UTF 8 là gì?

UTF-8 giống như mã hóa UTF khác, một ký tự mã hóa để mã hóa các ký tự của UCS ký tự Unicode.Base64 là một mã hóa để thể hiện bất kỳ chuỗi byte nào bằng một chuỗi các ký tự có thể in (nghĩa là A - Z, A - Z, 0 - 9, + và /).Không có hệ thống.