Cách mã hóa Base64 hoạt động

Nếu internet là đường cao tốc thông tin, thì đường dẫn cho email là một khe núi hẹp. Chỉ những chiếc xe rất nhỏ mới có thể vượt qua.

Hệ thống vận chuyển email được thiết kế chỉ cho văn bản thuần ASCII. Cố gắng gửi văn bản bằng các ngôn ngữ khác hoặc các tệp tùy ý giống như nhận được một chiếc xe tải qua khe núi.

Làm thế nào để xe tải lớn đi qua Ravine?

Sau đó, làm thế nào để bạn gửi một chiếc xe tải lớn thông qua một khe núi nhỏ? Bạn phải mang nó đến từng mảnh ở một đầu, vận chuyển các mảnh qua khe núi, và xây dựng lại chiếc xe tải từ các mảnh ở đầu bên kia.

Điều tương tự cũng xảy ra khi bạn gửi tệp đính kèm qua email . Trong một quá trình được gọi là mã hóa dữ liệu nhị phân được chuyển thành văn bản ASCII, có thể được chuyển trong email mà không có vấn đề gì. Vào cuối của người nhận, dữ liệu được giải mã và tập tin gốc được xây dựng lại.

Một phương pháp mã hóa dữ liệu tùy ý dưới dạng văn bản ASCII thuần túy là Base64. Nó là một trong những kỹ thuật được sử dụng bởi chuẩn MIME để gửi dữ liệu khác với văn bản thuần túy .

Base64 để giải cứu

Mã hóa Base64 mất ba byte, mỗi byte bao gồm tám bit, và đại diện cho chúng là bốn ký tự có thể in theo tiêu chuẩn ASCII. Nó thực hiện điều đó về cơ bản là hai bước.

Bước đầu tiên là chuyển đổi ba byte thành bốn số sáu bit. Mỗi ký tự trong tiêu chuẩn ASCII bao gồm bảy bit. Base64 chỉ sử dụng 6 bit (tương ứng với 2 ^ 6 = 64 ký tự) để đảm bảo dữ liệu được mã hóa có thể in và có thể đọc được. Không có ký tự đặc biệt nào có sẵn trong ASCII được sử dụng.

64 ký tự (do đó tên Base64) là 10 chữ số, 26 ký tự chữ thường, 26 ký tự chữ hoa cũng như '+' và '/'.

Nếu ví dụ, ba byte là 155, 162 và 233, luồng bit tương ứng (và đáng sợ) là 100110111010001011101001, lần lượt tương ứng với các giá trị 6 bit 38, 58, 11 và 41.

Những con số này được chuyển đổi thành ký tự ASCII trong bước thứ hai sử dụng bảng mã hóa Base64. Giá trị 6 bit của ví dụ của chúng tôi chuyển thành chuỗi ASCII "m6Lp".

Quy trình hai bước này được áp dụng cho toàn bộ chuỗi byte được mã hóa. Để đảm bảo dữ liệu được mã hóa có thể được in chính xác và không vượt quá giới hạn độ dài dòng của máy chủ thư, các ký tự dòng mới được chèn để giữ độ dài dòng dưới 76 ký tự. Các ký tự dòng mới được mã hóa giống như tất cả các dữ liệu khác.

Giải quyết Endgame

Khi kết thúc quá trình mã hóa, chúng tôi có thể gặp sự cố. Nếu kích thước của dữ liệu gốc theo byte là bội số của ba, mọi thứ đều hoạt động tốt. Nếu không, chúng tôi có thể kết thúc bằng một hoặc hai byte 8 bit. Tuy nhiên, để mã hóa thích hợp, chúng tôi cần chính xác ba byte.

Giải pháp là để thêm đủ byte với giá trị '0' để tạo nhóm 3 byte. Hai giá trị như vậy được nối thêm nếu chúng ta có thêm một byte dữ liệu, một giá trị được thêm vào cho hai byte phụ.

Tất nhiên, các ký tự nhân tạo này không thể được mã hóa bằng bảng mã hóa dưới đây. Chúng phải được đại diện bởi một nhân vật thứ 65.

Ký tự đệm Base64 là '='. Đương nhiên, nó chỉ có thể xuất hiện ở phần cuối của dữ liệu được mã hóa.

Bảng mã hóa Base64

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