Mã hóa cơ sở 64 được sử dụng để làm gì?


782

Tôi đã nghe mọi người nói về "mã hóa cơ sở 64" ở đây và đó. Cái này được dùng để làm gì?


1
Từ hướng dẫn sử dụng base64_encode () : "Mã hóa này được thiết kế để làm cho dữ liệu nhị phân tồn tại trong quá trình vận chuyển qua các lớp vận chuyển không sạch 8 bit, chẳng hạn như các thân thư."
still_dreaming_1

Câu trả lời:


941

Khi bạn có một số dữ liệu nhị phân mà bạn muốn gửi qua mạng, bạn thường không làm điều đó bằng cách chỉ truyền các bit và byte qua dây ở định dạng thô. Tại sao? bởi vì một số phương tiện truyền thông được thực hiện để truyền phát văn bản. Bạn không bao giờ biết - một số giao thức có thể hiểu dữ liệu nhị phân của bạn là ký tự điều khiển (như modem) hoặc dữ liệu nhị phân của bạn có thể bị sai lệch vì giao thức cơ bản có thể nghĩ rằng bạn đã nhập một tổ hợp ký tự đặc biệt (như cách FTP dịch dòng kết thúc).

Vì vậy, để giải quyết vấn đề này, mọi người mã hóa dữ liệu nhị phân thành các ký tự. Base64 là một trong những loại mã hóa.

Tại sao 64?
Bởi vì bạn thường có thể dựa vào cùng 64 ký tự có mặt trong nhiều bộ ký tự và bạn có thể tin tưởng một cách hợp lý rằng dữ liệu của bạn sẽ kết thúc ở phía bên kia của dây không bị lỗi.


104
(Về lý thuyết bạn có thể thực hiện mã hóa cơ sở 80 hoặc một cái gì đó tương tự, nhưng nó sẽ khó hơn đáng kể. Quyền hạn của hai là cơ sở tự nhiên cho nhị phân.)
Jon Skeet

13
@yokees: Không có gì đảm bảo, họ chỉ là những nhân vật hầu như luôn an toàn. Đây là lý do tại sao có nhiều dạng Base-64 ( en.wikipedia.org/wiki/Base-64 ).

8
Điều đó có nghĩa là tất cả các loại dữ liệu truyền qua mạng nên sử dụng một số loại mã hóa?
Tanner Summers

6
Nhưng tại sao phương thức base64 được sử dụng để mã hóa dữ liệu chuỗi? ví dụ: trong hàm javascript atob Có nghĩa là máy chủ mã hóa tệp json sang định dạng base64? Các ký tự đặc biệt có thể là trường hợp sử dụng nhưng tại sao không phải là utf8 trong trường hợp đó, chúng có đồng nhất không? Bất kỳ nguồn lực nào khác liên quan đến điều đó sẽ được đánh giá rất cao cảm ơn bạn.
partizanos

4
Một danh sách ít nhất một số giao thức sẽ thất bại sẽ rất tốt nếu có ai đó biết.
Tadej

202

Về cơ bản, đây là cách mã hóa dữ liệu nhị phân tùy ý trong văn bản ASCII. Phải mất 4 ký tự cho mỗi 3 byte dữ liệu, cộng với khả năng có một chút phần đệm ở cuối.

Về cơ bản, mỗi 6 bit của đầu vào được mã hóa trong bảng chữ cái 64 ký tự. Bảng chữ cái "tiêu chuẩn" sử dụng AZ, az, 0-9 và + và /, với = làm ký tự đệm. Có các biến thể an toàn URL.

Wikipedia là một nguồn hợp lý tốt của nhiều thông tin hơn.


Trong một langange như php, dữ liệu nhị phân sẽ đến từ. Chúng tôi hầu như luôn luôn làm việc với dữ liệu chuỗi là văn bản.
Cholthi Paul Ttiopic

3
@CholthiPaulTtiopic: Kết quả của mã hóa hoặc nén, hoặc âm thanh / hình ảnh / video.
Jon Skeet

1
@CholthiPaulTtiopic: Tôi e rằng tôi không biết ý của bạn là gì về "lưu trữ" nhưng tại thời điểm này tôi nghĩ chúng ta hơi lạc đề.
Jon Skeet

2
@CholthiPaulTtiopic: Tôi chắc chắn sẽ tránh suy nghĩ về "chuỗi nhị phân". Dữ liệu nhị phân phải được coi là dữ liệu nhị phân và không được coi là văn bản. Tôi đã thấy hàng trăm - có thể hàng ngàn câu hỏi về SO mà về cơ bản làm sôi sục những người không quan tâm đúng mức đến sự khác biệt này.
Jon Skeet

1
@ still_dreaming_1 PHP gọi cho họ binary strings. (nguồn) php.net/manual/en/function.pack.php
Cholthi Paul Ttiopic


116

Đó là mã hóa văn bản của dữ liệu nhị phân trong đó văn bản kết quả không có gì ngoài chữ cái, số và ký hiệu "+", "/" và "=". Đó là một cách thuận tiện để lưu trữ / truyền dữ liệu nhị phân trên phương tiện được sử dụng riêng cho dữ liệu văn bản.

Nhưng tại sao Base-64? Hai lựa chọn thay thế để chuyển đổi dữ liệu nhị phân thành văn bản ngay lập tức nảy ra trong đầu là:

  1. Số thập phân: lưu trữ giá trị thập phân của mỗi byte dưới dạng ba số: 045 112 101 037, v.v ... trong đó mỗi byte được biểu thị bằng 3 byte. Các dữ liệu nở ba lần.
  2. Hệ thập lục phân: lưu trữ các byte dưới dạng cặp hex: AC 47 0D 1A, v.v ... trong đó mỗi byte được biểu thị bằng 2 byte. Các dữ liệu nở hai lần.

Base-64 ánh xạ 3 byte (8 x 3 = 24 bit) thành 4 ký tự trải dài 6 bit (6 x 4 = 24 bit). Kết quả trông giống như "TWFuIGlzIGRpc3Rpb ...". Do đó, tỷ lệ đầy hơi chỉ bằng 4/3 = 1,3333333 lần so với ban đầu.


10
Tôi có hiểu chính xác không, 64 là lựa chọn tốt nhất vì nó là sức mạnh cao nhất trong số hai có thể chuyển đổi thành ký tự ASCII có thể in được (có 95 trong số chúng)?
voho

Nếu trong cả hai trường hợp, chúng là 24 bit, thì không phải là tỷ lệ 1: 1 đầy đủ? Hoặc Khi bạn nói 4 ký tự trải dài 6 bit, bạn có nghĩa là thực sự có 8 bit cho mỗi char nhưng hai ký tự đầu tiên được đệm 0 không?
David Klempfner

1
@Backwards_Dave Mỗi 6 bit được thể hiện bằng 8 bit. Vì vậy, tỷ lệ đầy hơi là 8: 6 hoặc 4: 3.
Ates Goral

82

Ngoài những gì đã được nói, hai cách sử dụng rất phổ biến chưa được liệt kê là

Băm:

Băm là các hàm một chiều biến đổi một khối byte thành một khối byte khác có kích thước cố định, chẳng hạn như 128bit hoặc 256bit (SHA / MD5). Chuyển đổi các byte kết quả thành Base64 giúp hiển thị hàm băm dễ dàng hơn nhiều, đặc biệt khi bạn so sánh tổng kiểm tra tính toàn vẹn. Băm thường được thấy trong Base64 đến nỗi nhiều người nhầm chính Base64 là một hàm băm.

Mật mã:

Vì khóa mã hóa không phải là văn bản mà là byte thô, đôi khi cần phải lưu trữ nó trong một tệp hoặc cơ sở dữ liệu, mà Base64 có ích. Tương tự với các byte được mã hóa kết quả.

Lưu ý rằng mặc dù Base64 thường được sử dụng trong mật mã không phải là một cơ chế bảo mật. Bất cứ ai cũng có thể chuyển đổi chuỗi Base64 trở lại các byte ban đầu của nó, vì vậy không nên sử dụng nó như một phương tiện để bảo vệ dữ liệu, chỉ như một định dạng để hiển thị hoặc lưu trữ các byte thô dễ dàng hơn.

Giấy chứng nhận

Chứng chỉ x509 ở định dạng PEM được mã hóa cơ sở 64. http://how2ssl.com/articles/usiness_with_pem_files/


4
Thực sự dễ dàng hơn, xử lý, để lưu trữ byte dưới dạng byte trong nhiều trường hợp. Ngay cả trong cơ sở dữ liệu và đặc biệt là trong một tệp (nếu các bản ghi có độ dài cố định được sử dụng hoặc các byte là nội dung duy nhất). Base64 thường được sử dụng khi các byte đó được dự định truyền đi đâu đó, đặc biệt là trên một kênh có thể mất bit hoặc giải thích một số byte là mã điều khiển.
cHao

Tôi chưa bao giờ thấy một hàm băm được viết dưới dạng số nguyên 8 bit không dấu, 0,1,255,36 ... và hiển thị nó bằng UTF-8 hoặc bất kỳ mã hóa nào khác sẽ không có ý nghĩa, bạn sẽ hiển thị nó như thế nào ngoài cơ sở64? Khóa mã hóa và dữ liệu được mã hóa thường được lưu trữ trong các tệp cấu hình và XML nơi bạn không thể lưu trữ các byte thô. Tôi đồng ý nếu bạn có thể lưu trữ nó dưới dạng byte thô thì bằng mọi cách, nhưng base64 là dành cho những tình huống khi bạn không thể. Có rất nhiều công dụng của base64 ngoài việc truyền tải. Đây chỉ đơn giản là hai kịch bản phổ biến mà bạn sẽ thấy nó.
Despertar

1
Bạn sẽ hiển thị hàm băm dưới dạng hex, không phải thập phân. Đối với băm, đó là thực tế phổ biến hơn nhiều so với cơ sở64.
cHao

@cHao Vâng, điều này cũng phổ biến. Các chữ số hex có thể đại diện cho bất kỳ dữ liệu nhị phân nào, nhưng cơ sở 64 có lợi thế là chiếm ít không gian hơn vì nó sử dụng nhiều ký tự hơn.
Despertar

45

Nhiều năm trước, khi chức năng gửi thư được giới thiệu, do đó, hoàn toàn dựa trên văn bản, khi thời gian trôi qua, cần có các tệp đính kèm như hình ảnh và phương tiện (âm thanh, video, v.v.) ra đời. Khi các tệp đính kèm này được gửi qua internet (về cơ bản ở dạng dữ liệu nhị phân), xác suất dữ liệu nhị phân bị hỏng rất cao ở dạng thô. Vì vậy, để giải quyết vấn đề này, BASE64 đã xuất hiện.

Vấn đề với dữ liệu nhị phân là nó chứa các ký tự null, trong một số ngôn ngữ như C, C ++ đại diện cho phần cuối của chuỗi ký tự, vì vậy việc gửi dữ liệu nhị phân ở dạng thô chứa byte NULL sẽ ngăn không cho tệp được đọc và dẫn hoàn toàn vào dữ liệu bị hỏng.

Ví dụ :

Trong C và C ++, ký tự "null" này hiển thị phần cuối của chuỗi. Vì vậy, "HELLO" được lưu trữ như thế này:

XIN CHÀO

72 69 76 76 79 00

00 nói "dừng ở đây".

Bây giờ hãy đi sâu vào cách mã hóa BASE64 hoạt động.

Điểm cần lưu ý: Độ dài của chuỗi phải là bội số của 3.

Ví dụ 1 :

Chuỗi được mã hóa: Số lượt truy cập, chiều dài = 3

1) Chuyển đổi từng ký tự thành số thập phân.

a = 97, c = 99, e = 101

nhập mô tả hình ảnh ở đây

2) Thay đổi mỗi đại diện nhị phân thành 8 bit.

97 = 01100001, 99 = 01100011, 101 = 01100101

Kết hợp: 01100001 01100011 01100101

3) Phân chia trong một nhóm 6 bit.

011000 010110 001101 100101

4) Tính nhị phân thành số thập phân

011000 = 24, 010110 = 22, 001101 = 13, 100101 = 37

5) Chuyển đổi các ký tự thập phân thành base64 bằng biểu đồ base64.

24 = Y, 22 = W, 13 = N, 37 = l

Một lần nữa

nhập mô tả hình ảnh ở đây

Ví dụ 2:

Chuỗi được mã hóa: Thời gian abcd tối giản = 4, không phải là bội số của 3. Vì vậy, để tạo độ dài chuỗi bội số của 3, chúng ta phải thêm phần đệm 2 bit để tạo độ dài = 6. Bit đệm được biểu thị bằng dấu = =.

Điểm cần lưu ý: Một bit đệm bằng hai số 0 nên hai bit đệm bằng bốn số 0 0000.

Vì vậy, hãy bắt đầu quá trình: -

1) Chuyển đổi từng ký tự thành số thập phân.

a = 97, b = 98, c = 99, d = 100

2) Thay đổi mỗi đại diện nhị phân thành 8 bit.

97 = 01100001, 98 = 01100010, 99 = 01100011, 100 = 01100100

3) Tách riêng trong một nhóm 6 bit.

011000, 010110, 001001, 100011, 011001, 00

Vì vậy, 6 bit cuối cùng không hoàn thành, vì vậy chúng tôi chèn hai bit đệm bằng bốn số 0 0000 00.

011000, 010110, 001001, 100011, 011001, 000000 ==

Bây giờ, nó là bằng nhau. Hai dấu bằng ở cuối cho thấy 4 số 0 đã được thêm vào (giúp giải mã).

4) Tính nhị phân thành thập phân.

011000 = 24, 010110 = 22, 001001 = 9, 100011 = 35, 011001 = 25, 000000 = 0 == =

5) Chuyển đổi các ký tự thập phân thành base64 bằng biểu đồ base64.

24 = Y, 22 = W, 9 = j, 35 = j, 25 = Z, 0 = A ==

Tiếng vang abcd đỉnh => YDJjZA ==


5
đây thực sự là một lời giải thích tuyệt vời
maheshmnj

28

Trong thời kỳ đầu của máy tính, khi giao tiếp giữa các hệ thống điện thoại không đặc biệt đáng tin cậy, một phương pháp nhanh chóng và bẩn để xác minh tính toàn vẹn dữ liệu đã được sử dụng: "bit parity". Trong phương pháp này, mỗi byte được truyền sẽ có 7 bit dữ liệu và số 8 sẽ là 1 hoặc 0, để buộc tổng số 1 bit trong byte là chẵn.

Do đó 0x01 sẽ được truyền thành 0x81; 0x02 sẽ là 0x82; 0x03 sẽ vẫn là 0x03, v.v.

Để tiếp tục hệ thống này, khi bộ ký tự ASCII được xác định, chỉ 00-7F được gán các ký tự. (Vẫn như ngày nay, tất cả các ký tự được đặt trong phạm vi 80-FF đều không chuẩn)

Nhiều bộ định tuyến trong ngày đưa kiểm tra chẵn lẻ và dịch byte vào phần cứng, buộc các máy tính gắn liền với chúng phải xử lý nghiêm ngặt dữ liệu 7 bit. Điều này buộc các tệp đính kèm email (và tất cả các dữ liệu khác, đó là lý do tại sao các giao thức HTTP & SMTP dựa trên văn bản), được chuyển đổi thành định dạng chỉ có văn bản.

Rất ít các bộ định tuyến tồn tại vào những năm 90. Tôi hoàn toàn nghi ngờ bất kỳ ai trong số họ đang sử dụng ngày hôm nay.


2
Đây là một điểm tuyệt vời của cuộc thảo luận và một bài học lịch sử thú vị, cảm ơn.
Dan Bechard

26

Từ http://en.wikipedia.org/wiki/Base64

Thuật ngữ Base64 dùng để chỉ một mã hóa chuyển nội dung MIME cụ thể. Nó cũng được sử dụng như một thuật ngữ chung cho bất kỳ sơ đồ mã hóa tương tự nào mã hóa dữ liệu nhị phân bằng cách xử lý nó bằng số và dịch nó thành biểu diễn cơ sở 64. Sự lựa chọn đặc biệt của cơ sở là do lịch sử mã hóa bộ ký tự: người ta có thể chọn một bộ gồm 64 ký tự là cả một phần của tập hợp con phổ biến cho hầu hết các mã hóa và cũng có thể in được. Sự kết hợp này khiến dữ liệu khó có thể được sửa đổi trong quá trình chuyển qua các hệ thống, chẳng hạn như email, theo truyền thống không sạch 8 bit.

Base64 có thể được sử dụng trong nhiều bối cảnh:

  • Evolution và Thunderbird sử dụng Base64 để làm xáo trộn mật khẩu email [1]
  • Base64 có thể được sử dụng để truyền và lưu trữ văn bản có thể gây ra xung đột dấu phân cách
  • Base64 thường được sử dụng như một lối tắt nhanh chóng nhưng không an toàn để che giấu các bí mật mà không làm phát sinh chi phí quản lý khóa mật mã

  • Kẻ gửi thư rác sử dụng Base64 để trốn tránh các công cụ chống spam cơ bản, thường không giải mã Base64 và do đó không thể phát hiện từ khóa trong tin nhắn được mã hóa.

  • Base64 được sử dụng để mã hóa các chuỗi ký tự trong các tệp LDIF
  • Base64 đôi khi được sử dụng để nhúng dữ liệu nhị phân vào tệp XML, sử dụng cú pháp tương tự như ...... ví dụ: bookmark của Firefox.html.
  • Base64 cũng được sử dụng khi liên lạc với các thiết bị in Chữ ký tài chính của chính phủ (thông thường, qua các cổng nối tiếp hoặc song song) để giảm thiểu độ trễ khi chuyển các ký tự biên nhận để ký.
  • Base64 được sử dụng để mã hóa các tệp nhị phân như hình ảnh trong các tập lệnh, để tránh phụ thuộc vào các tệp bên ngoài.
  • Có thể được sử dụng để nhúng dữ liệu hình ảnh thô vào thuộc tính CSS như hình nền.

11

Một số giao thức vận chuyển chỉ cho phép các ký tự chữ và số được truyền đi. Chỉ cần tưởng tượng một tình huống trong đó các ký tự điều khiển được sử dụng để kích hoạt các hành động đặc biệt và / hoặc chỉ hỗ trợ độ rộng bit giới hạn cho mỗi ký tự. Base64 biến đổi bất kỳ đầu vào thành một mã hóa mà chỉ sử dụng ký tự chữ và số, +, /=là một nhân vật đệm.


9

Việc sử dụng Base64 tôi sẽ mô tả ở đây có phần hack. Vì vậy, nếu bạn không thích hack, xin đừng tiếp tục.

Tôi đã gặp rắc rối khi phát hiện ra rằng utf8 của MySQL không hỗ trợ các ký tự unicode 4 byte vì nó sử dụng phiên bản utf8 3 byte. Vì vậy, những gì tôi đã làm để hỗ trợ unicode 4 byte đầy đủ trên utf8 của MySQL? Vâng, base64 mã hóa chuỗi khi lưu trữ vào cơ sở dữ liệu và giải mã base64 khi truy xuất.

Vì mã hóa và giải mã cơ sở là rất nhanh, nên ở trên đã hoạt động hoàn hảo.

Bạn có những điểm sau cần lưu ý:

  • Mã hóa Base64 sử dụng thêm 33% dung lượng lưu trữ

  • Các chuỗi được lưu trữ trong cơ sở dữ liệu sẽ không thể đọc được bằng con người (Bạn có thể bán nó như một tính năng mà các chuỗi cơ sở dữ liệu sử dụng một hình thức mã hóa cơ bản).

Bạn có thể sử dụng phương pháp trên cho bất kỳ công cụ lưu trữ nào không hỗ trợ unicode.


6
"Bạn có thể bán nó như một tính năng mà các chuỗi cơ sở dữ liệu sử dụng một hình thức mã hóa cơ bản" Tôi thích phong cách của bạn: D
Ercan

8
"Bạn có thể bán nó như một tính năng mà các chuỗi cơ sở dữ liệu sử dụng một hình thức mã hóa cơ bản" thật là một điều kinh khủng khi nói: D
Alex

1
hình thức mã hóa cơ bản chống lại bất kỳ ai không có thuật toán giải mã cơ sở rofl: D
Eladian

1
@Alex Không phải là một "điều khủng khiếp để nói". Dữ liệu nhạy cảm độ hai có thể được mã hóa base64 để làm cho các quản trị viên db không thể đọc được. Không phải lúc nào cũng cần có mức mã hóa cao nhất cho mọi phần dữ liệu. Ví dụ: nếu bạn muốn ẩn "bình luận" khỏi quản trị viên db, thì base64 phù hợp với công việc. Gratcias!
Basil Musa

1
Điều đáng nói là MySQL hiện có hỗ trợ cho tất cả Unicode, mặc dù với mục đích tương thích ngược, utf8loại của chúng vẫn chỉ là ba byte; Nếu bạn muốn điều thực sự, sử dụng utf8mb4. Hack đẹp, nhưng không còn cần thiết
TRiG

7

Nó được sử dụng để chuyển đổi dữ liệu nhị phân tùy ý sang văn bản ASCII.

Ví dụ, tệp đính kèm e-mail được gửi theo cách này.


7

Tôi sử dụng nó theo nghĩa thực tế khi chúng ta chuyển các đối tượng nhị phân (hình ảnh) lớn qua các dịch vụ web. Vì vậy, khi tôi đang thử nghiệm dịch vụ web C # bằng cách sử dụng tập lệnh python, đối tượng nhị phân có thể được tạo lại với một chút phép thuật.

[Trong trăn]

import base64
imageAsBytes = base64.b64decode( dataFromWS )

1
Liệu dữ liệu đi nhanh hơn?
FelipeM

@FelipeM chậm hơn, không nhanh hơn. Base64 có 33% chi phí (với giá an toàn.)
Juraj

6

Các lược đồ mã hóa của Basic Base64 thường được sử dụng khi có nhu cầu mã hóa dữ liệu nhị phân cần lưu trữ và chuyển qua phương tiện được thiết kế để xử lý dữ liệu văn bản. Điều này là để đảm bảo rằng dữ liệu vẫn còn nguyên vẹn mà không cần sửa đổi trong quá trình vận chuyển (Wiki, 2017)

Ví dụ có thể là như sau: bạn có một dịch vụ web chỉ chấp nhận ký tự ASCII. Bạn muốn lưu và sau đó chuyển dữ liệu của người dùng sang một số vị trí (API) khác nhưng người nhận muốn nhận dữ liệu chưa được xử lý. Base64 là dành cho điều đó. . . Nhược điểm duy nhất là mã hóa base64 sẽ cần khoảng trống nhiều hơn khoảng 33% so với các chuỗi thông thường.

Một ví dụ :: uenc = url = mã hóa aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html .

Như bạn có thể thấy, chúng tôi không thể đặt char / dữ liệu trong URL nếu chúng tôi muốn gửi URL được truy cập lần cuối dưới dạng tham số vì chúng tôi sẽ phá vỡ quy tắc thuộc tính / giá trị cho tham số MOD MOD viết lại - Tham số GET.

Một ví dụ đầy đủ sẽ là: Nhật http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product / 93 / ”


4

Hầu hết, tôi đã thấy nó được sử dụng để mã hóa dữ liệu nhị phân trong các ngữ cảnh chỉ có thể xử lý ascii - hoặc một bộ ký tự đơn giản.


3

Để mở rộng một chút về những gì Brad đang nói: nhiều cơ chế truyền tải cho email và Usenet và các cách di chuyển dữ liệu khác không phải là "8 bit sạch", điều đó có nghĩa là các ký tự bên ngoài bộ ký tự ascii tiêu chuẩn có thể được xử lý trong quá cảnh - ví dụ: 0x0D có thể được xem như là một sự trở lại vận chuyển, và biến thành một sự trở lại vận chuyển và nguồn cấp dữ liệu. Cơ sở 64 ánh xạ tất cả các ký tự nhị phân thành một số chữ cái và số ascii tiêu chuẩn và dấu chấm câu để chúng không bị sai lệch theo cách này.


2

Cơ sở64

Base64 là một thuật ngữ chung cho một số lược đồ mã hóa tương tự mã hóa dữ liệu nhị phân bằng cách xử lý nó bằng số và dịch nó thành biểu diễn 64 cơ sở. Thuật ngữ Base64 bắt nguồn từ một mã hóa chuyển nội dung MIME cụ thể.

Các lược đồ mã hóa Base64 thường được sử dụng khi có nhu cầu mã hóa dữ liệu nhị phân cần lưu trữ và chuyển qua phương tiện được thiết kế để xử lý dữ liệu văn bản. Điều này là để đảm bảo rằng dữ liệu vẫn còn nguyên vẹn mà không cần sửa đổi trong quá trình vận chuyển. Base64 được sử dụng phổ biến trong một số ứng dụng bao gồm email qua MIME và lưu trữ dữ liệu phức tạp trong XML.


0

Base64 có thể được sử dụng cho nhiều mục đích.

Lý do chính là để chuyển đổi dữ liệu nhị phân thành một cái gì đó có thể qua được.

Đôi khi tôi sử dụng nó để truyền dữ liệu JSON từ trang này sang trang khác, lưu trữ thông tin trong cookie về người dùng.

Lưu ý: Bạn "có thể" sử dụng nó để mã hóa - Tôi không hiểu tại sao mọi người nói bạn không thể, và đó không phải là mã hóa, mặc dù nó có thể dễ dàng bị phá vỡ và được tán thành. Mã hóa có nghĩa là không có gì khác hơn là chuyển đổi một chuỗi dữ liệu sang một chuỗi dữ liệu khác có thể được giải mã sau đó hoặc không, và đó là những gì cơ sở64 làm.



2
Bạn đang hiểu định nghĩa của "mã hóa" theo nghĩa đen quá xa . Từ này đã phát triển thành một cái gì đó cụ thể hơn một chút so với nguồn gốc của nó.
Đàn Bechard

0

Một chữ số thập lục phân là một nibble (4 bit). Hai nibble tạo ra 8 bit còn được gọi là 1 byte.

MD5 tạo ra một đầu ra 128 bit, được biểu diễn bằng một chuỗi gồm 32 chữ số thập lục phân, lần lượt là 32 * 4 = 128 bit. 128 bit tạo 16 byte (vì 1 byte là 8 bit).

Mỗi ký tự Base64 mã hóa 6 bit (ngoại trừ ký tự không phải pad cuối cùng có thể mã hóa 2, 4 hoặc 6 bit; và các ký tự pad cuối cùng, nếu có). Do đó, trên mỗi mã hóa Base64, hàm băm 128 bit yêu cầu ít nhất ⌈128 / 6⌉ = 22 ký tự, cộng với pad nếu có.

Sử dụng cơ sở64, chúng tôi có thể tạo đầu ra được mã hóa có độ dài mong muốn (6, 8 hoặc 10). Nếu chúng ta chọn quyết định đầu ra dài 8 char, nó chỉ chiếm 8 byte trong khi nó chiếm 16 byte cho đầu ra băm 128 bit.

Vì vậy, ngoài bảo mật, mã hóa base64 cũng được sử dụng để giảm dung lượng tiêu thụ.

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.