UltKit

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.

Chế độ

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

  1. 0A
  2. 1B
  3. 2C
  4. 3D
  5. 4E
  6. 5F
  7. 6G
  8. 7H
  9. 8I
  10. 9J
  11. 10K
  12. 11L
  13. 12M
  14. 13N
  15. 14O
  16. 15P
  17. 16Q
  18. 17R
  19. 18S
  20. 19T
  21. 20U
  22. 21V
  23. 22W
  24. 23X
  25. 24Y
  26. 25Z
  27. 26a
  28. 27b
  29. 28c
  30. 29d
  31. 30e
  32. 31f
  33. 32g
  34. 33h
  35. 34i
  36. 35j
  37. 36k
  38. 37l
  39. 38m
  40. 39n
  41. 40o
  42. 41p
  43. 42q
  44. 43r
  45. 44s
  46. 45t
  47. 46u
  48. 47v
  49. 48w
  50. 49x
  51. 50y
  52. 51z
  53. 520
  54. 531
  55. 542
  56. 553
  57. 564
  58. 575
  59. 586
  60. 597
  61. 608
  62. 619
  63. 62+ -
  64. 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àoByteChuẩnAn toàn cho URLĐộ dài
U1VQ==VQ4
Ul2VWw=VWw4
Ult3VWx0VWx04
UltK4VWx0Sw==VWx0Sw8
UltKi5VWx0S2k=VWx0S2k8
UltKit6VWx0S2l0VWx0S2l08

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.