Mã hóa & giải mã Base64
Chuyển văn bản hoặc tệp sang Base64, hoặc giải mã Base64 thành văn bản đọc được. Unicode được xử lý chính xác, bảng ký tự URL-safe chỉ cách một cú nhấp, và khi giải mã, công cụ chấp nhận cả hai bảng ký tự, có hoặc không có ký tự đệm.
0 ký tự · 0 từ · 0 dòng
0 ký tự · 0 từ · 0 dòng
Chạy hoàn toàn trong tab trình duyệt này. Văn bản của bạn không bao giờ được tải lên hay lưu trữ.
Bảng chữ cái Base64
Chỉ số → ký tự theo RFC 4648. Hai ký tự cuối được tô sáng khác nhau ở biến thể an toàn cho URL: 62 là + hoặc -, 63 là / hoặc _.
- 0A
- 1B
- 2C
- 3D
- 4E
- 5F
- 6G
- 7H
- 8I
- 9J
- 10K
- 11L
- 12M
- 13N
- 14O
- 15P
- 16Q
- 17R
- 18S
- 19T
- 20U
- 21V
- 22W
- 23X
- 24Y
- 25Z
- 26a
- 27b
- 28c
- 29d
- 30e
- 31f
- 32g
- 33h
- 34i
- 35j
- 36k
- 37l
- 38m
- 39n
- 40o
- 41p
- 42q
- 43r
- 44s
- 45t
- 46u
- 47v
- 48w
- 49x
- 50y
- 51z
- 520
- 531
- 542
- 553
- 564
- 575
- 586
- 597
- 608
- 619
- 62+ -
- 63/ _
Kết quả dài đến mức nào
Cứ 3 byte đầu vào trở thành 4 ký tự; nhóm cuối gồm 1 hoặc 2 byte được đệm bằng = trong Base64 chuẩn và không đệm ở dạng an toàn cho URL.
| Đầu vào | Byte | Chuẩn | An toàn cho URL | Độ dài |
|---|---|---|---|---|
U | 1 | VQ== | VQ | 4 |
Ul | 2 | VWw= | VWw | 4 |
Ult | 3 | VWx0 | VWx0 | 4 |
UltK | 4 | VWx0Sw== | VWx0Sw | 8 |
UltKi | 5 | VWx0S2k= | VWx0S2k | 8 |
UltKit | 6 | VWx0S2l0 | VWx0S2l0 | 8 |
Base64 dùng để làm gì
Base64, được định nghĩa trong RFC 4648, biểu diễn các byte bất kỳ bằng 64 ký tự ASCII in được: A–Z, a–z, 0–9, + và /. Mỗi nhóm ba byte (24 bit) được chia thành bốn số 6 bit, và mỗi số chọn ra một ký tự trong bảng chữ cái. Khi độ dài đầu vào không chia hết cho ba, nhóm cuối được đệm thêm một hoặc hai dấu =. Kết quả luôn lớn hơn đầu vào khoảng 33%: cứ 3 byte thành 4 ký tự.
Base64 tồn tại vì nhiều kênh truyền được thiết kế cho văn bản. Email (MIME), URL data: trong HTML và CSS, các trường JSON chứa ảnh hoặc chứng chỉ, và tiêu đề xác thực HTTP Basic đều dùng Base64 để truyền dữ liệu nhị phân an toàn. Base64 không phải là mã hóa và không che giấu gì cả; giải mã không cần khóa.
Unicode và biến thể URL-safe
Base64 mã hóa byte chứ không phải chữ cái, nên văn bản trước hết phải được chuyển thành byte. Công cụ này luôn dùng UTF-8, bảng mã mà web đang chạy trên đó: é thành hai byte và một emoji thành bốn byte. Riêng hàm btoa có sẵn của trình duyệt sẽ báo lỗi với mọi ký tự trên U+00FF, vì vậy các bộ mã hóa đơn giản thường lỗi với chữ có dấu và emoji; ở đây văn bản được đưa qua TextEncoder trước, và khi giải mã thì TextDecoder đảo ngược quá trình. Nếu các byte sau khi giải mã không phải UTF-8 hợp lệ (ví dụ ảnh, file zip), công cụ sẽ hiển thị chúng dưới dạng thập lục phân thay vì chữ bị lỗi.
Base64 chuẩn dùng + và /, hai ký tự có ý nghĩa riêng trong URL và tên file. Bảng chữ cái an toàn cho URL ở mục 5 của RFC 4648 thay chúng bằng - và _, và phần đệm thường được bỏ đi. JSON Web Token dùng đúng dạng này. Bộ giải mã chấp nhận cả hai bảng chữ cái và cả khi thiếu phần đệm, nên bạn có thể dán dạng nào cũng được.
Mã hóa tệp và hình ảnh
Chọn một file và công cụ sẽ đọc ngay trên máy bằng FileReader, rồi trả về chuỗi Base64 của file, hoặc một URL data: hoàn chỉnh kèm kiểu MIME của file, sẵn sàng dán vào thẻ img hoặc nền CSS. Ảnh nhúng trực tiếp giúp tiết kiệm một yêu cầu HTTP nhưng dung lượng tăng thêm một phần ba và không thể được lưu cache riêng, nên phù hợp với biểu tượng nhỏ hơn là ảnh chụp. Nếu cần xem trước ảnh và có sẵn đoạn mã HTML, CSS, hãy dùng Chuyển ảnh sang Base64.
Câu hỏi thường gặp
- Vì sao kết quả Base64 dài hơn dữ liệu đầu vào?
- Cứ 3 byte thành 4 ký tự, nên đầu ra có dung lượng khoảng 4/3 đầu vào, cộng thêm tối đa hai ký tự đệm. Văn bản không phải ASCII còn dài hơn nữa, vì UTF-8 dùng từ hai đến bốn byte cho mỗi ký tự.
- Các dấu = ở cuối chuỗi là gì?
- Đó là phần đệm. Chúng làm độ dài đầu ra chia hết cho bốn khi độ dài đầu vào không chia hết cho ba. Một dấu = nghĩa là nhóm cuối có hai byte, hai dấu = nghĩa là nhóm cuối chỉ có một byte.
- Vì sao giải mã báo lỗi ký tự không hợp lệ?
- Đầu vào chứa ký tự nằm ngoài bảng chữ cái, chẳng hạn khoảng trắng giữa một từ, dấu nháy, hoặc dấu % từ mã hóa URL. Ngắt dòng và thiếu phần đệm vẫn được chấp nhận; các ký tự khác thì không.
- Mã hóa mật khẩu bằng Base64 có an toàn không?
- Base64 không đem lại bất kỳ sự bảo vệ nào. Xác thực HTTP Basic gửi user:password dưới dạng Base64, vì vậy chỉ được dùng qua HTTPS. Hãy dùng mã hóa hoặc băm thực sự để bảo vệ thông tin bí mật.
- Base64 và Base64url khác nhau thế nào?
- Chỉ khác hai ký tự và phần đệm: Base64url dùng - và _ thay cho + và /, thường bỏ dấu =, nên kết quả có thể nằm trong URL và tên file mà không cần escape.