Mục đích thực sự của mã hóa Base64 là gì?


81

Tại sao chúng ta có mã hóa Base64? Tôi là người mới bắt đầu và tôi thực sự không hiểu tại sao bạn lại xáo trộn các byte thành một thứ khác (trừ khi đó là mã hóa). Trong một trong những cuốn sách tôi đọc, mã hóa Base64 rất hữu ích khi không thể truyền nhị phân. Ví dụ. Khi chúng tôi đăng một biểu mẫu, nó sẽ được mã hóa. Nhưng tại sao chúng ta chuyển đổi byte thành chữ cái? Chúng ta không thể chỉ chuyển đổi byte thành định dạng chuỗi với khoảng trắng ở giữa? Ví dụ 00000001 00000004,? Hoặc đơn giản là 0000000100000004không có bất kỳ khoảng trống nào vì byte luôn đi theo cặp 8?


11
Bởi vì bạn vừa chuyển 1 byte thành 8 thay vì 3 thành 4 như bạn làm với base64 (nếu bộ nhớ phục vụ tôi một cách chính xác). Băng thông là hữu hạn.
Brian Roach

Bạn đang nhầm lẫn giữa các bit (8 bit mà bạn tạo thành một byte) và các byte, có thể thuộc bất kỳ loại nhóm nào.
Denys Séguret

Câu trả lời:


108

Base64 là một cách để mã hóa dữ liệu nhị phân thành một bộ ký tự ASCII được hầu hết mọi hệ thống máy tính biết đến, để truyền dữ liệu mà không làm mất hoặc sửa đổi nội dung của chính nó. Ví dụ, hệ thống thư không thể xử lý dữ liệu nhị phân vì chúng mong đợi dữ liệu ASCII (dạng văn bản). Vì vậy, nếu bạn muốn chuyển một hình ảnh hoặc một tệp khác, nó sẽ bị hỏng do cách xử lý dữ liệu.

Lưu ý: mã hóa base64 KHÔNG phải là cách mã hóa, cũng không phải là cách nén dữ liệu. Trên thực tế, một phần dữ liệu được mã hóa base64 lớn hơn 1,333… lần so với mảnh dữ liệu gốc. Đó chỉ là một cách để đảm bảo rằng không có dữ liệu nào bị mất hoặc bị sửa đổi trong quá trình chuyển.


5
Dữ liệu được mã hóa Base64 lớn hơn chính xác 1,333 (3) lần so với dữ liệu gốc + thêm 0-3 ký tự phụ tùy thuộc vào độ dài của mô-đun dữ liệu đầu vào 4. Đó là do mỗi ký tự được mã hóa base64 lưu trữ 6 bit giá trị thông tin (64 ký tự khác nhau) .
quá

2
cả trước và sau dữ liệu vẫn là nhị phân. thì tại sao dữ liệu có được mất
Naresh Teli

12

Base64 là một cơ chế cho phép biểu diễn và truyền dữ liệu nhị phân qua các phương tiện chỉ cho phép các ký tự có thể in được. Đây là dạng phổ biến nhất của “Mã hóa cơ sở”, các dạng khác được sử dụng là Base16 và Base32.

Nhu cầu về Base64 nảy sinh từ nhu cầu đính kèm nội dung nhị phân vào email như hình ảnh, video hoặc nội dung nhị phân tùy ý. Vì SMTP [RFC 5321] chỉ cho phép các ký tự US-ASCII 7 bit trong thông báo, nên cần phải biểu diễn các luồng bát phân nhị phân này bằng cách sử dụng các ký tự ASCII bảy bit ...

Hy vọng điều này trả lời câu hỏi


3

Base64 là một cách truyền ít nhiều (thực tế là mã hóa, nhưng với mục tiêu truyền) bất kỳ loại dữ liệu nhị phân nào.

Xem http://en.wikipedia.org/wiki/Base64

"Quy tắc chung là chọn một tập hợp gồm 64 ký tự vừa là một phần của tập hợp con chung cho hầu hết các bảng mã, vừa có thể in được."

Đó là một mục đích rất chung và nhu cầu chung là không lãng phí nhiều không gian hơn mức cần thiết.

Về mặt lịch sử, nó dựa trên thực tế là có một tập hợp con chung của (hầu hết) tất cả các mã hóa được sử dụng để lưu trữ các ký tự thành byte và rất nhiều 2 ^ 8 byte có thể có nguy cơ mất hoặc biến đổi trong quá trình truyền dữ liệu đơn giản (ví dụ: một bản sao- trình tự paste-emailsend-emailreceive-copy-paste).

(vui lòng chuyển hướng upvote đến nhận xét của Brian, tôi chỉ làm cho nó đầy đủ hơn và hy vọng rõ ràng hơn).


Không, chỉ còn sớm và tôi không muốn tìm ra câu trả lời đầy đủ. Điều này là tốt.
Brian Roach
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.