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ạ! Show
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ự 01001000 01100101 011110010, 01001000 01100101 011110011, 01001000 01100101 011110012 và 01001000 01100101 011110013 để biểu diễn dữ liệu, với 01001000 01100101 011110014 đượ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óaMã 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à 01001000 01100101 011110010, 01001000 01100101 011110011, 01001000 01100101 011110012 và 01001000 01100101 011110013 (đế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 011110010 và 01001000 01100101 011110011 cho 62 giá trị đầu tiên và 01001000 01100101 011110012 và 01001000 01100101 011110013 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:
Base64 DecodingGiả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:
Base64 mã hóa và giải mã chuỗiNó 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 1110016. 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:
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 1110018 đến 010010 000110 010101 1110019 đượ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 011110013 được biểu thị bằng 62 và 63. ký tự 01001000 01100101 011110014 đượ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 011110012 and 01001000 01100101 011110013 are represented by 62 and 63. The character 01001000 01100101 011110014 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ố đó.
Dựa trên các tính toán của chúng tôi ở trên, chữ cái 010010 000110 010101 1110016 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 011110014 trong chuỗi được mã hóa.
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 1110018 đến 010010 000110 010101 1110019 đượ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 011110013 được biểu thị bằng 62 và 63. ký tự 01001000 01100101 011110014 được sử dụng để đệm khi các bit không thể được chia thành các nhóm 6.
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 011110014 trong chuỗi được mã hóa. from base64 import b64encode text_binary = b'Heyo' # SGV5bw== print(b64encode(text_binary)) oCó 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 1100001. Chúng tôi đệm chúng với 010010 000110 010101 111001 011011 1100002 để 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.) b 010010 000110 010101 111001 011011 1100007 w
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 đối tượng giống như byte 010010 000110 010101 111001 011011 1100009 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? 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. |