29 Base64 là gì? Bảng ký tự Base64 và cách mã hóa Base64 mới nhất

Base64 là gì? Bảng ký tự Base64 và cách mã hóa Base

Base64 là gì?

Base64 là một kỹ thuật mã hóa và giải mã được sử dụng để chuyển đổi dữ liệu dạng nhị phân sang định dạng văn bản ASCII và ngược lại. Nó được sử dụng để truyền dữ liệu qua một phương tiện chỉ hỗ trợ các định dạng ASCII, chẳng hạn như thư email trên dữ liệu MIME và XML.

Base64 còn được gọi là Mã hóa-Truyền-Nội dung Base64.

Base64 mã hóa cho phép nhúng tệp hoặc dữ liệu vào phương tiện mà không cho phép một số dữ liệu nhất định. Ví dụ: các tệp nhị phân, chẳng hạn như hình ảnh, thường chứa các byte làm gián đoạn quá trình truyền e-mail , vì vậy các tệp đính kèm thường được mã hóa base64 (sử dụng MIME) để có định dạng thân thiện hơn.

Đặc điểm của Base64 là gì?

Base64 là thuật toán mã hóa cho phép bạn chuyển đổi bất kỳ ký tự nào thành một bảng chữ cái bao gồm các chữ cái Latinh, chữ số, dấu cộng và dấu gạch chéo. Nhờ nó, bạn có thể chuyển đổi các ký tự Trung Quốc, biểu tượng cảm xúc và thậm chí cả hình ảnh thành một chuỗi “có thể đọc được”, có thể được lưu hoặc chuyển đi bất cứ đâu.

Mã hóa dạng base64 chỉ chứa các ký tự ASCII ký tự ‘A’ đến ‘Z’ (chữ hoa và chữ thường), chữ số ‘0’ đến ‘9’, và những biểu tượng ‘+’, ‘/’, và ‘=’. Điều này thêm tới 64 giá trị khác nhau, do đó có tên là base64. Dữ liệu được mã hóa Base64 phải được giải mã để máy tính hiểu được dữ liệu gốc.

Base64 là một lược đồ mã hóa nhị phân sang văn bản thường được sử dụng để chuyển các thông điệp dựa trên nội dung qua Internet. Nó hoạt động bằng cách chia mỗi 3 bit dữ liệu nhị phân thành các đơn vị 6 bit. Dữ liệu mới được tạo được biểu diễn dưới dạng hệ thống số 64 cơ số và dưới dạng văn bản ASCII 7 bit. Bởi vì mỗi bit được chia thành hai bit, dữ liệu được chuyển đổi là 33%, hoặc một phần ba, lớn hơn dữ liệu ban đầu.

Nguồn gốc của Base64

Để hiểu một cách hình tượng tại sao lại có Base64, hãy tưởng tượng rằng trong một cuộc gọi điện thoại, A muốn gửi một hình ảnh cho B. Vấn đề đầu tiên là A không thể mô tả hình ảnh một cách đơn giản như thế nào, bởi vì B cần một bản sao chính xác. Trong trường hợp này, A có thể chuyển đổi hình ảnh sang hệ nhị phân và ra lệnh cho B các chữ số nhị phân (bit), sau đó B sẽ có thể chuyển đổi chúng trở lại hình ảnh ban đầu. Vấn đề thứ hai là giá cước cho các cuộc gọi điện thoại quá đắt và quy định mỗi byte vì 8 chữ số nhị phân sẽ tồn tại quá lâu. Để giảm chi phí, A và B đồng ý sử dụng phương pháp truyền dữ liệu hiệu quả hơn bằng cách sử dụng một bảng chữ cái đặc biệt , thay thế mỗi “6 chữ số” bằng “1 chữ cái”.

Ban đầu, thuật toán được đặt tên là “mã hóa có thể in – printable encoding” và chỉ sau một vài năm, vào tháng 6 năm 1992, RFC 1341 định nghĩa nó là “Base64”. Vì thuật toán này sử dụng 64 ký tự cơ bản nên không khó để đặt tên cho nó (đặc biệt là Base85 đã tồn tại). Do đó, tôi nghĩ sẽ không có vấn đề gì nếu bạn đoán được tên của các thuật toán như Base16, Base32, Base36, Base58, Base91 hoặc Base122 có nghĩa là gì.

Bảng ký tự Base64

Bảng chữ cái Base64 chứa 64 ký tự ASCII cơ bản được sử dụng để mã hóa dữ liệu. 64 ký tự là đủ để mã hóa mọi dữ liệu có độ dài bất kỳ. Hạn chế duy nhất là kích thước của kết quả sẽ tăng lên 33%. Tuy nhiên, lợi ích của nó quan trọng hơn nhiều, ít nhất là vì tất cả các ký hiệu này đều có sẵn trong các bộ ký tự 7-bit và 8-bit.

Các ký tự của bảng chữ cái Base64 có thể được nhóm thành bốn nhóm:

  • Chữ hoa (chỉ số 0-25): ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • Chữ thường (chỉ số 26-51): abcdefghijklmnopqrstuvwxyz
  • Chữ số (chỉ số 52-61): 0123456789
  • Các ký hiệu đặc biệt (chỉ số 62-63): +/

Điều rất quan trọng cần lưu ý rằng các chữ cái Base64 là trường hợp nhạy cảm . Điều này có nghĩa là, ví dụ: khi giải mã các giá trị “QQ==”, “Qq==”, “qq==” và “qQ==” sẽ thu được bốn kết quả khác nhau.

Để hiểu rõ hơn, tôi đã nhóm tất cả các ký tự vào bảng Base64:

Chỉ mục (từ 0 đến 64) Ký tự
0 A
1 B
2 C
3 D
4 E
5 F
6 G
7 H
8 I
9 J
10 K
11 L
12 M
13 N
14 O
15 P
16 Q
17 R
18 S
19 T
20 U
21 V
22 W
23 X
24 Y
25 Z
26 a
27 b
28 c
29 d
30 e
31 f
32 g
33 h
34 i
35 j
36 k
37 l
38 m
39 n
40 o
41 p
42 q
43 r
44 s
45 t
46 u
47 v
48 w
49 x
50 y
51 z
52 0
53 1
54 2
55 3
56 4
57 5
58 6
59 7
60 8
61 9
62 +
63 /

Ngoài các ký tự này, dấu bằng (=) được sử dụng để đệm. Nghĩa là, dấu bằng không sở hữu chỉ mục và không liên quan đến việc mã hóa dữ liệu. Nói chung, ký tự đệm đảm bảo rằng độ dài của giá trị Base64 là bội số của 4 byte và nó luôn được thêm vào ở cuối đầu ra. Tuy nhiên, trung tâm của thuật toán chỉ chứa 64 ký tự và đối với mỗi ký tự có một chỉ mục duy nhất. Chỉ các chỉ mục xác định ký tự nào sẽ được sử dụng để mã hóa dữ liệu và chỉ nhờ chúng, bạn mới có thể “khôi phục” dữ liệu ban đầu. Tất cả các chỉ số được liệt kê trong bảng Base64 ở trên.

Với tất cả những điều trên, giá trị Base64 có thể được xác định bằng cách sử dụng biểu thức chính quy sau:

^[A-Za-z0-9+/]+={0,2}$

Tuy nhiên, một số tiêu chuẩn cho phép và thậm chí yêu cầu sử dụng các giá trị nhiều dòng. Trong những trường hợp như vậy, chúng tôi cần bổ sung danh sách các ký tự, bằng cách cho phép “Nguồn cấp hàng” và “Chuyển hàng trở lại”.

^[A-Za-z0-9+/rn]+={0,2}$

Ứng dụng của Base64 như thế nào?

Base64 được sử dụng phổ biến nhất để mã hóa dữ liệu nhị phân (ví dụ: hình ảnh hoặc tệp âm thanh) để nhúng vào HTML, CSS, EML và các tài liệu văn bản khác. Ngoài ra, Base64 được sử dụng để mã hóa dữ liệu có thể không được hỗ trợ hoặc bị hỏng trong quá trình truyền, lưu trữ hoặc xuất. Dưới đây là một số ứng dụng của thuật toán:

  • Đính kèm tệp khi gửi email
  • Nhúng hình ảnh trong HTML hoặc CSS qua URI dữ liệu
  • Bảo tồn các byte thô của các hàm mật mã
  • Xuất dữ liệu nhị phân dưới dạng XML hoặc JSON trong các phản hồi API
  • Lưu tệp nhị phân vào cơ sở dữ liệu khi BLOB không khả dụng

Ví dụ và cách thực hiện mã hóa Base64

Để chuyển đổi file sang dạng Base64, ta thực hiện theo các bước như sau:

  1. Đọc nội dung file dưới dạng bit.
  2. Cứ 6 bits ta tách thành một nhóm để xử lý.
  3. Tra bảng mã Base64, mỗi nhóm 6 bits sẽ có giá trị tương ứng với một ký tự.
  4. Ghi ra file các ký tự đó.

Chuyển text sang Base64

Ví dụ: Chuyển từ Man sang mã base64 sẽ là TWFu

Công cụ tham khảo: https://base64.guru/converter/encode/text

Giải thích:

Trong ví dụ trên, Mã ASCII, các kí tự M, a, n sẽ là 77, 97, và 110 với 8-bit nhị phân là 01001101, 01100001, và 01101110. Có 3 giá trị được nối lại với nhau thành một chuổi 24bit cụ thể là 010011010110000101101110. Một nhóm 6bit có tối đa 2^6 = 64 các giá trị nhị phân khác nhau sẽ được tính từ trái sang phải. (trong trường hợp này 24bit ta sẽ chia thành 4 nhóm từ trái sang phải 010011 010110 000101 101110 sau đó tra bảng mã base64 sẽ được giá trị base64 tương ứng).

Khi số bytes không chia hết cho 3 điều đó có nghĩa là thiếu 1 hay 2 bytes thì ta thêm phần bytes phụ với giá trị bằng 0 và thực hiện chuyển đổi.

Chuyển hình ảnh sang Base64

Ví dụ: Chuyển 1 hình ảnh logo của wikimaytinh.com sang mã Base64

Công cụ tham khảo: https://base64.guru/converter/encode/image

Base64 String của logo:

iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29

HTML <img> code của logo:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbn/6HAAAAAElFTkSuQmCC"/>

CSS Background Source của logo:

background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMyQmCC)

Có nên dùng Base64 để mã hóa mật khẩu không?

Không nên. Bởi vì thuật toán Base64 hoàn toàn có thể giải mã đảo ngược ra dữ liệu gốc dễ dàng. Nó không được sử dụng để “băm” mật khẩu hoặc “mã hóa” dữ liệu nhạy cảm. Base64 chỉ có thể được sử dụng để mã hóa kết quả thô của một hàm mật mã.

Nói một cách đại khái, về bảo mật thông tin, Base64 chỉ là một thứ tiếng nước ngoài mà một số người không hiểu. Tuy nhiên, ngay cả khi họ có thể hiểu ý nghĩa của thông điệp được mã hóa chỉ đơn giản bằng cách sử dụng một trình dịch trực tuyến , nó sẽ trả về ngay lập tức thông điệp gốc.

Bài viết này có hữu ích với bạn không?
Không