Mục đích của mã hóa cơ sở 64 là gì và tại sao nó được sử dụng trong Xác thực cơ bản HTTP?


129

Tôi không nhận được mã hóa Base64.

Nếu một người có thể giải mã chuỗi Base64, mục đích của nó là gì?

Tại sao nó được sử dụng cho HTTP Basic auth?

Nó giống như nói với ai đó mật khẩu của tôi bị đảo ngược thành OLLEH.

Những người nhìn thấy OLLEH sẽ biết mật khẩu ban đầu là HELLO.




10
base64 không phải là mã hóa, nó là mã hóa
n611x007

Câu trả lời:


248

Base64 không phải là mã hóa - nó là một mã hóa. Đó là một cách biểu diễn dữ liệu nhị phân chỉ sử dụng các ký tự có thể in (văn bản).

Xem đoạn này từ trang wikipedia để xác thực cơ bản HTTP :

Mặc dù mã hóa tên người dùng và mật khẩu bằng thuật toán Base64 thường khiến chúng không thể đọc được bằng mắt thường, chúng dễ dàng được giải mã khi chúng được mã hóa. Bảo mật không phải là mục đích của bước mã hóa. Thay vào đó, mục đích của mã hóa là mã hóa các ký tự không tương thích HTTP có thể có trong tên người dùng hoặc mật khẩu thành các ký tự tương thích HTTP.


4
Ngoài ra, có vẻ như mã hóa ký tự có liên quan để lấy 'dữ liệu nhị phân' từ chuỗi, phải là iso-8859-1 . ( nguồn )
Myobis

60

Nó thường được gọi là mã hóa base64, không phải mã hóa! Điều thú vị về mã hóa base64 là nó cho phép bạn biểu diễn dữ liệu (nhị phân) chỉ sử dụng một tập hợp con giới hạn, phổ biến của các ký tự có sẵn, hiệu quả hơn nhiều so với việc chỉ viết một chuỗi 1 và 0 như ASCII.


6
+1, nhưng so với việc lưu trữ dữ liệu trong luồng 1, 0 thì quá cường điệu. Tốt hơn là so sánh nó với việc lưu trữ dữ liệu ở định dạng hex. Bởi vì hex sẽ chỉ tạo ra x2nhiều byte hơn luồng ban đầu và 1s, 0 - làm cho x8số byte nhiều hơn gấp nhiều lần. (Và Base64 tạo ra x1.3nhiều dữ liệu hơn mảng byte gốc). Vì vậy, đôi khi có thể chấp nhận mã hóa luồng nhị phân dưới dạng chuỗi hex, nhân đôi số lượng byte - ví dụ chỉ để lưu trữ mật khẩu băm trong cơ sở dữ liệu.
Ag Pa Vasiliauskas

30

En crypt ion yêu cầu khóa (chuỗi hoặc thuật toán) để giải mã; do đó "mật mã" (root: mật mã )

En cod ing sửa đổi / dịch chuyển / thay đổi mã ký tự thành mã khác. Trong trường hợp này, các byte dữ liệu thông thường giờ đây có thể được biểu diễn và vận chuyển dễ dàng bằng HTTP.


5
Mã hóa chỉ có nghĩa là "để hiển thị ẩn" - mật mã dựa trên khóa là một phát minh rất gần đây. Mã hóa là một hình thức mã hóa đã được sử dụng làm mã hóa (mặc dù không phải ai trên 12 tuổi trong hàng trăm năm).

2
Mã hóa trong tiếng bản địa được sử dụng để chỉ các chế độ mã hóa gần đây, cụ thể là mã hóa máy tính, dựa trên khóa (khóa chung / khóa riêng). Mặc dù đúng, không cần thiết phải chỉ ra một định nghĩa theo nghĩa đen của một từ ngày; nếu không, bạn sẽ tranh luận về định nghĩa lịch sử của nhiều từ tiếng Anh được sử dụng ngày nay. Các vernacular (và đôi khi thông tục) là những gì cung cấp cho các từ ngữ cảnh và do đó định nghĩa.
vol7ron

1
Tôi không nghĩ bạn có vẻ thô lỗ; Tôi đồng ý với quan điểm của bạn về bối cảnh hiện đại. Từ ngữ và định nghĩa không ngừng phát triển. Tôi nghĩ rằng "mã hóa" và "mã hóa" chắc chắn có hai định nghĩa rất khác biệt trong điện toán hiện đại và câu trả lời của bạn rất nỗ lực trong việc tóm tắt sự khác biệt.
Dan Bechard

Mã hóa Base64 là một hình thức của obfuscation, có nghĩa đơn giản là làm cho không rõ ràng. Đối với nhiều ứng dụng, đây là mã hóa đủ trong đó mục tiêu chỉ đơn giản là thu thập bất kỳ văn bản rõ ràng nào được gửi qua một dây chẳng hạn.
Đaminh Cerisano

6
@DominicCerisano: Không, mã hóa base64 không được tính là mã hóa và tôi hy vọng bạn không sử dụng nó để bảo vệ bất cứ điều gì.
Ry-

19

Trong ngôn ngữ hàng ngày, một mã mã vùng Viking là một cái gì đó bí mật. Trong khoa học và kỹ thuật, một mã chỉ đơn giản là một thỏa thuận, một bộ quy tắc, về cách viết một cái gì đó.

Mã đó có thể là bí mật. Trong trường hợp đó, nó được gọi là mã hóa. Nhưng nói chung, một mã không phải là bí mật. Lấy mã di truyền. Nó chỉ đơn giản nói rằng DNA của chúng tôi được xây dựng từ bốn căn cứ khác nhau -  A, C, GTvà ba cơ sở được thực hiện cùng nhau tạo thành một amino axit. Ngoài ra còn có một bảng trong đó ba chữ cái tạo thành axit amin.

Không có gì bí mật về mã này.

Tương tự như vậy, Base64 không phải là một mã bí mật. Thay vào đó, đó là một mã cho phép lưu trữ dữ liệu trong sáu bit cho mỗi ký tự (do đó có 64 thực thể khác nhau, tức là cơ sở cơ sở của hệ thống là 64, giống như cơ sở của hệ thập phân của chúng tôi là 10, vì có 10 thực thể khác nhau được gọi là chữ số chữ cái).



17

Mã hóa Base-64 là một phần của thông số kỹ thuật MIME. Nó cung cấp một mã hóa an toàn vận chuyển cho dữ liệu sẽ không bị nhai nếu / khi nó được chuyển tiếp qua một máy chủ sử dụng sơ đồ mã hóa khác với dữ liệu được sử dụng bởi máy khách gốc.

Có rất nhiều máy chủ khác nhau trên các intertubes và bạn thực sự không thể nhận hỗ trợ cho bất cứ thứ gì ngoài ASCII 7 bit, mà không có nguy cơ mất / nhầm lẫn dữ liệu.

Chẳng hạn, các máy tính lớn của IBM sử dụng một mã hóa gọi là EBCDIC (có nhiều loại khác nhau). Các điểm mã của nó hoàn toàn khác với các điểm mã được sử dụng bởi các 'puters dựa trên ASCII - trong ASCII, các chữ cái AZ là 0x41 - 0x5A; trong EBCDIC, các chữ cái A - Z thậm chí không phải là một phạm vi liền kề: các chữ cái AI sống ở 0xC1 - 0xC9, các chữ cái JR sống ở 0xD1 - 0xD9 và các chữ cái sống ở 0xE2 - 0xE9.


0

Theo mặc định, các tham số trường tiêu đề thư trong các thông báo Giao thức truyền siêu văn bản (HTTP) không thể mang các ký tự bên ngoài bộ ký tự ISO- 8859-1.

Nếu tên người dùng và mật khẩu chứa bộ ký tự không tương thích hơn HTTP sẽ không thể mang các văn bản đó. để ngăn chặn điều này, chúng tôi mã hóa tên người dùng và mật khẩu bằng base64 để đảm bảo rằng chúng tôi đang gửi char tương thích HTTP qua HTTP. để biết thêm thông tin, hãy xem Basic_access_authentication này

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.