Cách giải mã tệp trong python

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

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

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

Mã hóa Base64 là gì?

Mã hóa Base64 là một loại chuyển đổi byte thành ký tự ASCII. Trong toán học, cơ sở của một hệ thống số là có bao nhiêu ký tự khác nhau đại diện cho các 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 các số

Bộ ký tự Base64 chứa

  • 26 chữ hoa
  • 26 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]

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

Ghi chú. Đây không phải là thuật toán mã hóa và không được sử dụng cho mục đích bảo mật

Bây giờ chúng ta đã biết mã hóa Base64 là gì và nó được thể hiện như thế nào trên máy tính, hãy tìm hiểu 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 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 một chuỗi, chúng tôi sẽ làm theo các bước sau

  1. Lấy giá trị ASCII của từng ký tự trong chuỗi
  2. Tính tương đương nhị phân 8 bit của 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 nhóm lại các chữ số
  4. Chuyển đổi các nhóm nhị phân 6 bit thành 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 từng 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 tương ứng 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 ở dạng nhị phân 8 bit như sau

01010000 01111001 01110100 01101000 01101111 01101110

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. Nhị phân kết quả sẽ trông như thế này

010100 000111 100101 110100 011010 000110 111101 101110

Ghi chú. Đô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ự

Với dữ liệu của chúng tôi trong các nhóm 6 bit, chúng tôi có thể lấy 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 xem xét
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 tôi có thể xác định rằng "Python" được biểu thị là
010100 000111 100101 110100 011010 000110 111101 101110
9 khi mã hóa Base64. Bạn có thể xác minh kết quả này bằng công cụ chuyển đổi trực tuyến

Để mã hóa Base64 một chuỗi, chúng tôi chuyển đổi nó thành chuỗi nhị phân, sau đó thành chuỗi thập phân và cuối cùng, sử dụng bảng tra cứu để lấy chuỗi 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ó, hãy xem tại sao chúng tôi mã hóa Base64 cho dữ liệu của mình

Tại sao nên sử dụng Mã hóa Base64?

Trong máy tính, tất cả dữ liệu thuộc các loại khác nhau được truyền dưới dạng 1 và 0. Tuy nhiên, một số kênh giao tiếp 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 các số 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ý theo cách khác nếu nó đại diện cho một chữ cái hoặc hình ảnh

Để khắc phục 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 khả năng dữ liệu được truyền và xử lý chính xác. Base64 là một phương pháp phổ biến để lấy dữ liệu nhị phân thành các ký tự ASCII, được đa số các mạng và ứng dụng hiểu rộng rãi

Một tình huống phổ biến trong thế giới thực nơi mã hóa Base64 được sử dụng nhiều là trong các máy chủ thư. Ban đầu chúng được xây dựng để xử lý dữ liệu văn bản, nhưng chúng tôi cũng mong muốn chúng gửi hình ảnh và phương tiện khác cùng với tin nhắn. 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 để ứ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

010100 000111 100101 110100 011010 000110 111101 101110
3

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

Mã hóa chuỗi bằng Python

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

20 7 37 52 26 6 61 46
1 cho phép chúng ta 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

010100 000111 100101 110100 011010 000110 111101 101110
7

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Trong đoạn 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 cách sử dụ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 kết quả vào
20 7 37 52 26 6 61 46
9 bằng phương pháp
010100 000111 100101 110100 011010 000110 111101 101110
30. 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 dưới dạng ASCII

Ghi chú. Đảm bảo sử dụng cùng một định dạng mã hóa khi chuyển đổi từ chuỗi thành byte và từ byte thành chuỗi. Điều này ngăn ngừa tham nhũng dữ liệu

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

010100 000111 100101 110100 011010 000110 111101 101110
6

Bây giờ hãy xem cách chúng ta có thể giải mã chuỗi Base64 thành biểu diễn thô của nó

Giải mã chuỗi bằng Python

Giải mã chuỗi Base64 về cơ bản là đảo ngược quá trình mã hóa. Chúng tôi giải mã chuỗi Base64 thành byte dữ liệu chưa đượ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 là

010100 000111 100101 110100 011010 000110 111101 101110
32, hãy viết đoạn mã sau

010100 000111 100101 110100 011010 000110 111101 101110
8

Một lần nữa, chúng ta cần nhập mô-đun

20 7 37 52 26 6 61 46
1. Sau đó, chúng tôi mã hóa tin nhắn của mình thành một đối tượng giống như byte với
010100 000111 100101 110100 011010 000110 111101 101110
34. Chúng tôi tiếp tục bằng cách gọi phương thức
010100 000111 100101 110100 011010 000110 111101 101110
35 để giải mã
20 7 37 52 26 6 61 46
9 thành 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, để con người có thể đọc được

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

010100 000111 100101 110100 011010 000110 111101 101110
6

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

Mã hóa dữ liệu nhị phân bằng Python

Như chúng tôi đã đề cập trước đây, mã hóa Base64 chủ yếu được sử dụng để biểu thị dữ liệu nhị phân dưới dạng văn bản. Trong Python, chúng tôi cần đọc tệp nhị phân và Base64 mã hóa các byte của nó để chúng tôi 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

010100 000111 100101 110100 011010 000110 111101 101110
70 và thêm vào như sau

010100 000111 100101 110100 011010 000110 111101 101110
8

Hãy xem lại đoạn mã trên. Chúng tôi mở tệp bằng cách sử dụng

010100 000111 100101 110100 011010 000110 111101 101110
71. Lưu ý cách chúng tôi chuyển đối số
010100 000111 100101 110100 011010 000110 111101 101110
72 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 tệp nhị phân. Nếu không sử dụng
010100 000111 100101 110100 011010 000110 111101 101110
72, Python sẽ cho rằng chúng ta đang đọc một tệp văn bản

Sau đó chúng ta sử dụng phương thức

010100 000111 100101 110100 011010 000110 111101 101110
74 để lấy tất cả dữ liệu trong tệp vào biến
010100 000111 100101 110100 011010 000110 111101 101110
75. Tương tự như cách chúng tôi xử lý các chuỗi, chúng tôi Base64 đã mã hóa các byte bằng
010100 000111 100101 110100 011010 000110 111101 101110
30 và sau đó sử dụng
010100 000111 100101 110100 011010 000110 111101 101110
77 trên
010100 000111 100101 110100 011010 000110 111101 101110
78 để lấy dữ liệu được mã hóa Base64 bằng các ký tự mà con người có thể đọc được

Thực thi mã sẽ tạo ra đầu ra tương tự như

01010000 01111001 01110100 01101000 01101111 01101110
7

Đầu ra của bạn có thể khác nhau 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 mã hóa dữ liệu nhị phân Bas64 trong Python, hãy chuyển sang giải mã dữ liệu nhị phân Base64

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

Mã nhị phân giải mã Base64 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 Base64, chúng tôi lưu dữ liệu dưới dạng tệp nhị phân thay vì chuỗi

Hãy xem cách giải mã dữ liệu nhị phân Base64 trong thực tế bằng cách tạo một tệp mới có tên là

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

010100 000111 100101 110100 011010 000110 111101 101110
0

Trong đoạn mã trên, trước tiên chúng tôi chuyển đổi dữ liệu chuỗi Base64 của mình thành một đối tượng giống như byte có thể được giải mã. Khi bạn giải mã tệp nhị phân base64, 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 chứ không phải tệp MP3 vì nó mã hóa hình ảnh

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
60, một phương pháp khác với
010100 000111 100101 110100 011010 000110 111101 101110
35 đượ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 ghi dữ liệu đã giải mã vào một tệp

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

010100 000111 100101 110100 011010 000110 111101 101110
79, bây giờ bạn sẽ thấy một tệp
010100 000111 100101 110100 011010 000110 111101 101110
63 mới chứa ả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 ký tự ASCII. Điều này hữu ích khi truyền dữ liệu đến 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

Làm cách nào để giải mã dữ liệu trong Python?

decode[] là một phương thức được chỉ định trong Chuỗi trong Python 2. Phương thức này được sử dụng để chuyển đổi từ một lược đồ mã hóa, trong đó chuỗi đối số được mã hóa thành lược đồ mã hóa mong muốn. Điều này hoạt động ngược lại với mã hóa. Nó chấp nhận mã hóa của chuỗi mã hóa để giải mã nó và trả về chuỗi gốc.

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

Để đọc một tệp văn bản bằng Python, bạn làm theo các bước sau. .
Đầu tiên, mở một tệp văn bản để đọc bằng hàm open[]
Thứ hai, đọc văn bản từ tệp văn bản bằng phương thức tệp read[] , readline[] hoặc readlines[] của đối tượng tệp
Thứ ba, đóng tệp bằng phương thức đóng tệp []

Mã hóa [] trong Python là gì?

Phương thức encode[] mã hóa chuỗi, sử dụng mã hóa đã chỉ định . Nếu không có mã hóa nào được chỉ định, UTF-8 sẽ được sử dụng.

Giải mã một tập tin là gì?

Trong máy tính, mã hóa là quá trình đưa một chuỗi ký tự [chữ cái, số, dấu chấm câu và một số ký hiệu] vào một định dạng chuyên biệt để truyền hoặc lưu trữ hiệu quả. Giải mã là quá trình ngược lại -- việc chuyển đổi định dạng được mã hóa trở lại chuỗi ký tự ban đầu .

Chủ Đề