Search…

Mã Hóa Base64

03/07/20205 min read
Base64 không phải là một thuật toán mã hóa và trong mọi trường hợp, nó không nên được sử dụng để băm mật khẩu hoặc dữ liệu nhạy cảm, bởi vì đây là thuật toán có thể được dịch ngược, dữ liệu được mã hóa có thể dễ dàng được giải mã.

Vào năm 1993, John Linn công bố thuật toán mã hóa Base64 trong tài liệu chuẩn: RFC 1421 - Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures. Tạm dịch: Tăng cường bảo mật thư điện tử: Phần I: Xác thực và mã hóa thông điệp.

Sau đó, nó đã được sửa đổi đôi chút vào tháng 9 năm 1993 bởi N. Borenstein trong phần: RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Part I: Mechanisms for Specifying and Describing the Format of Internet Message Bodies.

Lịch sử của Base64 bắt đầu vào thời điểm khi các kỹ sư tranh luận có bao nhiêu bit trong một byte. Bây giờ chúng ta sử dụng một byte với tám bit, nhưng trước đó đã được sử dụng một byte bảy bit, sáu bit và thậm chí ba bit bởi vì tất cả các hệ thống lớn vào lúc đó đã tự định nghĩa, giao ước với nhau, cho đến ngày nay kỹ sư làm việc của một hệ thống lớn cũng có thể tự quy định một byte với bao nhiêu bít tùy vào hoàn cảnh họ muốn và đảm bảo sự ổn định của hệ thống. Vào thời điểm mã hóa tám bit được công bố là một tiêu chuẩn, nhiều hệ thống đã sử dụng các tiêu chuẩn cũ và không hỗ trợ tiêu chuẩn mới. Điều này dẫn đến thực tế là một số dữ liệu đã bị mất trong quá trình chuyển đổi giữa hệ thống mới và hệ thống cũ. Ví dụ, một máy chủ thư điện tử có thể loại bỏ bit thứ tám khi gửi mail, điều này là hoàn toàn không thể chấp nhận. Hơn nữa, có một vấn đề khác với các máy chủ thư điện tử là họ chỉ có thể gửi văn bản chứ không thể gửi dữ liệu nhị phân như: hình ảnh, video nói chung và tệp tin đa phương tiện nói riêng. Và vì vậy thuật toán Base64 được sinh ra để giải quyết những vấn đề này. Tất nhiên, theo thời gian, các bảng mã khác được phát triển, nhưng nhờ sự đơn giản và hiệu quả Base64 trở nên phổ biến nhất và được sử dụng ở hầu hết mọi nơi.

# CHAR # CHAR # CHAR # CHAR
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 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
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

Vì thuật toán này sử dụng 64 ký tự cơ bản, không khó để đặt tên cho nó. Do đó sẽ không có vấn đề gì khi chúng ta đoán tên của các thuật toán như Base16, Base32, Base36, Base58, Base91 hoặc Base122.

Nhược điểm

Trong quá trình mã hóa, thuật toán Base64 thay thế mỗi ba byte bằng bốn byte và nếu cần thiết sẽ thêm các ký tự đệm, do đó, kết quả sẽ luôn là bội số của bốn. Nói một cách đơn giản, kích thước của kết quả sẽ luôn lớn hơn 33% (chính xác hơn là 4⁄3) so với dữ liệu gốc.

Số lượng bytes cần mã hóa tức số lượng byte đầu vào không chia hết cho 3 (Điều này có nghĩa là chỉ có 1 hoặc 2 bytes trong 24 bits mã hóa cuối cùng). Chúng ta sẽ thêm các bit 0 vào cuối cho đủ 24 bit, thực hiện mã hóa Base64, ngoại trừ những bytes gồm toàn bit 0 thì sẽ thay bằng kí tự ‘=’

Ứng dụng

Để hiểu theo nghĩa bóng tại sao Base64 được phát minh, hãy tưởng tượng rằng trong một cuộc gọi điện thoại, Alice muốn gửi một hình ảnh cho Bob. Vấn đề đầu tiên là cô ấy không thể mô tả đơn giản hình ảnh trông như thế nào, bởi vì Bob cần một bản sao chính xác. Trong trường hợp này, Alice có thể chuyển đổi hình ảnh thành hệ thống nhị phân và ra lệnh cho Bob các chữ số nhị phân (bit), sau đó anh ta sẽ có thể chuyển đổi chúng trở lại hình ảnh gốc. Vấn đề thứ hai là giá cước cho các cuộc gọi điện thoại quá đắt và chỉ ra mỗi byte là 8 chữ số nhị phân sẽ kéo dài quá lâu. Để giảm chi phí, Alice và Bob đồng ý sử dụng phương thức 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ế cho mỗi sáu ký số của Cameron bằng chữ cái.

Để nhận ra sự khác biệt, hãy xem hình ảnh màu đỏ có 3 kênh màu rgb: 3x3 = 3 pixel x 3 pixel x 3 byte = 27 byte được chuyển đổi thành chữ số nhị phân:

11111111000000000000 11111111000000000000 11111111000000000000
11111111000000000000 11111111000000000000 11111111000000000000
11111111000000000000 11111111000000000000 11111111000000000000

Hình ảnh được chuyển đổi thành Base64:

/AA/AA/AA/AA/AA/AA/AA/AA/AAA

Sử dụng

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ữ.

Bảo vệ

Base64 không phải là một thuật toán mã hóa và trong mọi trường hợp, nó không nên được sử dụng để băm mật khẩu hoặc dữ liệu nhạy cảm, bởi vì đây là thuật toán có thể được dịch ngược, dữ liệu được mã hóa có thể dễ dàng được giải mã.

Ví dụ một cách đơn giản, về mặt bảo mật thông tin, Base64 chỉ là một ngôn ngữ nước ngoài mà một số người trong nước không hiểu. Tuy nhiên, thậm chí họ có thể hiểu ý nghĩa của tin nhắn được mã hóa chỉ bằng cách sử dụng “google translate” trực tuyến, ngay lập tức họ nhận được thông điệp gốc.

Ví dụ

Chuyển đổi thông điệp ABC thông qua thuật toán Base64 ta có chuỗi kết quả QUJD

Input A B C
ASCII 65 66 67
Encode
Base64
0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1
16 20 9 3
Output Q U J D

Giới thiệu công cụ

Bạn có thể kiểm tra lại kết quả trên với công cụ mã hóa, giải mã Base64 online tại đây.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024