Bên cạch các encoding phổ biến như ASCII, UTF-8, UTF-16, UTF-32, Shift-Jis thì còn có Base64 encoding. Base64 là một dạng encoding được dùng để biểu diễn dữ liệu nhị phân (binary data) dưới dạng text, Base64 được sử dụng chủ yếu để biểu diễn các chuỗi khóa (key string) trong mã hóa/giải mã dữ liệu (data encryption/decryption). Ví dụ 1 chuỗi Base64 encoding →
1 2 3 4 5 |
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4= |
Base64 dùng 6 bit để biểu diễn một ký tự, do đó bảng mã Base64 có 2^6 = 64 ký tự. Tuy nhiên ngoài 64 ký tự chính thì bảng mã Base64 còn có 1 ký tự đặc biệt là ‘=’ dùng để biểu diễn data được padding vào cuối (chúng ta sẽ nói về padding ở phần sau).
Bảng mã Base64
Trong Base64 endcoding thì cứ 3 bytes = 24 bits sẽ được biểu diễn bằng 4 ký tự (4 x 6 = 24 bits). Nếu kích thước tính theo byte của binary data không chia hết cho 3 thì khi encode sẽ phải chèn thêm 1 hoặc 2 byte giá trị 0 vào. Tuy nhiên lúc này ký tự 000000 (binary) được padding vào sẽ được biểu diễn bằng ‘=’ thay vì ‘A’
Vi dụ: Ta có dữ liệu ở dạng text ASCII là “Tuan” ⇒ Dữ liệu ở dạng binary là 01010100011101010110000101101110. Do số byte là 4 không chia hết cho 3 nên sẽ phải padding thêm 2 bytes (giá trị 0) vào cuối thành 6 bytes: 010101000111010101100001011011100000000000000000 chia ra thành 8 ký tự Base64, mỗi ký tự 6 bits như sau →
010101: V 000111: H 010101: V 100001: h 011011: b 100000: g 000000: = (padding) 000000: = (padding)⇒ Chuỗi Base64 biểu diễn dữ liệu trên sẽ là “VHVhbg==” Hy vọng bài viết này sẽ giúp anh em hiểu được Base64 encoding và không bị quá bỡ ngỡ khi gặp nó trên đường đời.
— Phạm Minh Tuấn (Shun) —