Cơ sở64 Python

File: base64-example-1.py

import base64

MESSAGE = "life of brian"

file = open["out.txt", "w"]
file.write[MESSAGE]
file.close[]

base64.encode[open["out.txt"], open["out.b64", "w"]]
base64.decode[open["out.b64"], open["out.txt", "w"]]

print "original:", repr[MESSAGE]
print "encoded message:", repr[open["out.b64"].read[]]
print "decoded message:", repr[open["out.txt"].read[]]

original:  'life of brian'
encoded message: 'bGlmZSBvZiBicmlhbg==\012'
decoded message: 'life of brian'

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

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

Điều gì sẽ là cách giải quyết để tránh một vấn đề như vậy? . 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 cục bộ độ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 đến máy chủ và nhiều ứng dụng khác

Base64 là gì?

Trước khi đi sâu hơn vào bài viết, hãy xác định ý nghĩa của Base64

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

6
7,
6
8,
6
9,
Content-Type: text/plain; charset=UTF-8
00 và
Content-Type: text/plain; charset=UTF-8
01 để biểu thị dữ liệu, với
Content-Type: text/plain; charset=UTF-8
02 được sử dụng để đệm dữ liệu. Chẳng hạn, 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 Phần mở rộng thư Internet đa năng [MIME], được sử dụng rộng rãi cho HTTP và XML và ban đầu được phát triển để mã hóa các 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 việc biểu diễn dữ liệu nhị phân, vì nó cho phép dữ liệu nhị phân được biểu diễn theo cách nhìn và hoạt động như văn bản thuần túy, điều này làm cho nó đáng tin cậy hơn khi được lưu trữ trong cơ sở dữ liệu, gửi trong email hoặc sử dụng trong văn bản dựa trên . 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

Mã hóa Base64

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à

6
7,
6
8,
6
9,
Content-Type: text/plain; charset=UTF-8
00 và
Content-Type: text/plain; charset=UTF-8
01 [hãy đếm chúng, bạn có để ý rằng chúng cộng lại thành 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
6
7,
6
8 và
6
9 cho 62 giá trị đầu tiên và
Content-Type: text/plain; charset=UTF-8
00 và
Content-Type: text/plain; charset=UTF-8
01 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 tôi đang nén dữ liệu thành một tập hợp các ký tự nhỏ hơn

Bạn đã bao giờ nhìn thấy một phần của tệp email thô như tệp được hiển thị bên dưới [rất có thể bắt nguồn từ một email không được gửi] chưa? . [Nếu bạn để ý thấy

Content-Type: text/plain; charset=UTF-8
02 ở cuối, bạn có thể kết luận rằng đây là mã hóa Base64, vì dấu bằng được sử dụng trong quá trình mã hóa cho phần đệm. ]

1
Content-Type: text/plain; charset=UTF-8
2
Content-Transfer-Encoding: base64
3
4
___
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ
5
___
h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZhNin2LPYqtmB2LPYp9ixINi52YYg2KfZhNmF2YLYsdix
6
4_______0
Content-Type: text/plain; charset=UTF-8
1
Content-Type: text/plain; charset=UTF-8
2
Content-Type: text/plain; charset=UTF-8
3
Content-Type: text/plain; charset=UTF-8
4
Content-Type: text/plain; charset=UTF-8
5
Content-Type: text/plain; charset=UTF-8
6
Content-Type: text/plain; charset=UTF-8
7
Content-Type: text/plain; charset=UTF-8
8
Content-Type: text/plain; charset=UTF-8
9
2
0_______20_______1
2
2_______20_______20_______20_______20_______2

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

  • Văn bản được mã hóa được 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 [i. e. một. 97, b. 98, v.v. ]. Đây là bảng ASCII
  • Các giá trị thập phân thu được ở bước trên được chuyển đổi thành các giá trị nhị phân tương đương [i. e. 97. 01100001]
  • Tất cả các số nhị phân tương đương được nối, thu đượ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 số thập phân tương đương của chúng
  • Cuối cùng, các số thập phân tương đương được chuyển đổi thành các giá trị Base64 của chúng [i. e. 4. đ]. Dưới đây là các giá trị thập phân và bảng chữ cái Base64 của chúng

Giải mã Base64

Giải mã Base64 ngược lại với 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 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ác giá trị thập phân thu được được chuyển đổi thành các giá trị nhị phân tương đương của chúng
  • Hai bit đầu tiên của số nhị phân được cắt bớt từ mỗi số nhị phân thu được và 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 ở 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 số thập phân tương đương 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

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

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

Content-Type: text/plain; charset=UTF-8
14

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 của nó, sau đó chuyển đổi ASCII tương đương thành nhị phân. Điều này mang lại cho chúng ta các giá trị sau

Chữ Giá trị chỉ mục ASCII Giá trị nhị phân 8-bitH7201001000e10101100101y12101111001

Nói cách khác, chúng ta có thể viết

Content-Type: text/plain; charset=UTF-8
14 ở dạng nhị phân như thế này

1
2
8

Có tổng cộng 24 bit, khi được chuyển thành các nhóm 6 bit, mỗi kết quả sẽ có bốn giá trị

1
Content-Transfer-Encoding: base64
0

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

Content-Type: text/plain; charset=UTF-8
16 đến
Content-Type: text/plain; charset=UTF-8
17 được biểu thị bằng các giá trị từ 0 đến 25. Các ký tự
Content-Type: text/plain; charset=UTF-8
18 đến
Content-Type: text/plain; charset=UTF-8
19 được biểu thị bằng các giá trị từ 26 đến 51. Các số
Content-Type: text/plain; charset=UTF-8
20 đến
Content-Type: text/plain; charset=UTF-8
21 được biểu thị bằng các giá trị từ 52 đến 61. Các ký tự
Content-Type: text/plain; charset=UTF-8
00 và
Content-Type: text/plain; charset=UTF-8
01 được đại diện bởi 62 và 63. Ký tự
Content-Type: text/plain; charset=UTF-8
02 được sử dụng để đệm khi không thể chia đúng các bit thành các nhóm 6

Bây giờ chúng ta sẽ chuyển đổi các bit được sắp xếp lạ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 bit ValueBase64 Index ValueLetter01001018S0001106G01010121V111001575

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

Content-Type: text/plain; charset=UTF-8
14 sẽ trở thành
Content-Type: text/plain; charset=UTF-8
26 khi được mã hóa Base64. Chúng tôi có thể kiểm tra xem điều đó có đúng không bằng cách sử dụng đoạn mã sau

1
Content-Transfer-Encoding: base64
2
2
3
Content-Transfer-Encoding: base64
5_______23_______
5
Content-Transfer-Encoding: base64
8
6
3
0

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 cách mã hóa của một từ khác,

Content-Type: text/plain; charset=UTF-8
27, để giải thích sự xuất hiện của
Content-Type: text/plain; charset=UTF-8
02 trong chuỗi được mã hóa

Chữ Giá trị chỉ mục ASCII Giá trị nhị phân 8-bitH7201001000e10101100101y12101111001o11101101111

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 lại.

Content-Type: text/plain; charset=UTF-8
29. Chúng tôi đệm chúng bằng
Content-Type: text/plain; charset=UTF-8
30 để có được một nhóm 6 bit. Tạo các nhóm 6 bit từ cách sắp xếp trên sẽ cung cấp cho bạn thông tin sau

1
3
2

Các bit được sắp xếp lại sẽ trả lại cho bạn các ký tự sau dựa trên các giá trị chỉ mục Base64

Giá trị nhị phân 6 bit ValueBase64 Index ValueLetter01001018S0001106G01010121V11100157501101127b11000048w

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

Content-Type: text/plain; charset=UTF-8
27 sẽ là
Content-Type: text/plain; charset=UTF-8
32. Mỗi
Content-Type: text/plain; charset=UTF-8
02 đại diện cho một cặp
Content-Type: text/plain; charset=UTF-8
34 mà chúng tôi đã thêm vào để đệm chuỗi bit ban đầu

1
3
4_______20_______
3
3
7
4
5
4
0
6
4
2

Base64 Mã hóa hình ảnh

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

Tôi sẽ sử dụng hình ảnh nhị phân sau. Hãy tiếp tục và tải xuống và bắt đầu sử dụng Python. [Tôi cho rằng tên của hình ảnh là con nai. 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

Content-Type: text/plain; charset=UTF-8
35

Để mã hóa hình ảnh, chúng ta chỉ cần sử dụng chức năng

Content-Type: text/plain; charset=UTF-8
36. Python mô tả chức năng như sau

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

Content-Type: text/plain; charset=UTF-8
37 bằng Base64 và trả về các byte được mã hóa

Do đó, chúng ta có thể thực hiện các thao tác sau để mã hóa Base64 cho hình ảnh của mình

1
4
4
2
4
6
3
4
8
4
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ
0

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

Content-Type: text/plain; charset=UTF-8
38

Base64 giải mã một hình ảnh

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

Content-Type: text/plain; charset=UTF-8
39. Python đề cập đến những điều sau đây về chức năng này

Giải mã đối tượng giống như byte được mã hóa Base64 hoặc chuỗi ASCII s và trả về byte đã 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

Content-Type: text/plain; charset=UTF-8
40

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

Hãy cùng nhau đặt chương trình mã hóa và giải mã Base64 cho một hình ảnh. Tập lệnh Python thực hiện điều đó sẽ trông giống như sau

1
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ
2
2
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ
4
3
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ
6
4
24_______8
5
25_______0
6
___
5
2
Content-Type: text/plain; charset=UTF-8
1
5
4

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 con nai gốc. gif chúng tôi đã mã hóa trong bước đầu tiên

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

Mã hóa và giải mã an toàn URL

Như tôi đã đề cập trước đó trong hướng dẫn, mã hóa Base64 cũng sử dụng các ký tự

Content-Type: text/plain; charset=UTF-8
00 và
Content-Type: text/plain; charset=UTF-8
01 bên cạnh các giá trị chữ và số thông thường. Tuy nhiên, những ký tự này có ý nghĩa đặc biệt trong URL. Điều này có nghĩa là giá trị được mã hóa Base64 sử dụng các ký tự này có thể dẫn đến hành vi không mong muốn nếu được sử dụng bên trong URL

Một giải pháp cho vấn đề này là sử dụng các hàm

Content-Type: text/plain; charset=UTF-8
43 và
Content-Type: text/plain; charset=UTF-8
44 để mã hóa và giải mã bất kỳ dữ liệu nào. Các chức năng này thay thế
Content-Type: text/plain; charset=UTF-8
00 bằng
Content-Type: text/plain; charset=UTF-8
46 và
Content-Type: text/plain; charset=UTF-8
01 bằng
Content-Type: text/plain; charset=UTF-8
48 trong quá trình mã hóa

Đây là một ví dụ trong Python cho thấy sự khác biệt này

1
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ
2
2
___
3
5
9_______23__________
h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZhNin2LPYqtmB2LPYp9ixINi52YYg2KfZhNmF2YLYsdix
1
5
6
26_______4
Content-Type: text/plain; charset=UTF-8
1
h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZhNin2LPYqtmB2LPYp9ixINi52YYg2KfZhNmF2YLYsdix
6
Content-Type: text/plain; charset=UTF-8
3
Content-Type: text/plain; charset=UTF-8
5
h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZhNin2LPYqtmB2LPYp9ixINi52YYg2KfZhNmF2YLYsdix
9
Content-Type: text/plain; charset=UTF-8
7
6
1
Content-Type: text/plain; charset=UTF-8
9
2
1_______1_______4_______20_______3_______1_______

Học Python

Tìm hiểu Python với hướng dẫn hướng dẫn Python hoàn chỉnh của chúng tôi, cho dù bạn mới bắt đầu hay bạn là một lập trình viên dày dặn đang tìm cách học các kỹ năng mới

Bài đăng này đã được cập nhật với sự đóng góp từ Nitish Kumar. Nitish là nhà phát triển web có kinh nghiệm tạo trang web Thương mại điện tử trên nhiều nền tảng khác nhau. Anh ấy dành thời gian rảnh của mình để thực hiện 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è

base64 trong Python là gì?

Mã nguồn. Lib/cơ sở64. py. Mô-đun này cung cấp các chức năng mã hóa dữ liệu nhị phân thành các ký tự ASCII có thể in được và giải mã các mã hóa đó trở lại dữ liệu nhị phân .

Làm cách nào để sử dụng mã hóa base64 trong Python?

Để chuyển đổi một chuỗi thành ký tự Base64, cần thực hiện theo các bước sau. .
Lấy giá trị ASCII của từng ký tự trong chuỗi
Tính toán tương đương nhị phân 8 bit của các giá trị ASCII
Chuyển đổi khối ký tự 8 bit thành khối 6 bit bằng cách nhóm lại các chữ số

Làm cách nào để đọc base64 Python?

Nhập base64 và codec
Chuyển đổi chuỗi thành b"" bằng codec. mã hóa [. ] và lưu trữ dưới dạng biến [ b64Str tại đây ]
Đơn giản chỉ cần sử dụng base64. b64decode[b64Str] và lưu dưới dạng resStr
[ Tùy chọn ] In resStr

Làm cách nào để chuyển đổi văn bản thành base64 trong Python?

if int[welcomeInput]==1. inputString= raw_input["Nhập chuỗi cần chuyển đổi thành Base64. "] base64Value = base64. b64encode[inputString. encode[]] print "Base64 Value = " + base64Value #Code để Chuyển đổi Cơ sở 64 thành Chuỗi .

Chủ Đề