UltKit

Base64编码与解码

把文本或文件转换为Base64,或将Base64解码回可读文本。Unicode字符处理正确,一键切换URL安全字母表;解码时两种字母表都能识别,有无填充均可。

模式

0 个字符 · 0 个词 · 0 行

0 个字符 · 0 个词 · 0 行

完全在当前浏览器标签页中运行,您的文本不会被上传或保存。

Base64 字符表

RFC 4648 中的索引 → 字符。高亮的最后两个在 URL 安全变体中不同:62 是 + 或 -,63 是 / 或 _。

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

输出长度会变成多少

每 3 个输入字节变成 4 个字符;最后剩下的 1 或 2 个字节,在标准 Base64 中用 = 填充,在 URL 安全形式中不填充。

输入字节数标准URL 安全长度
U1VQ==VQ4
Ul2VWw=VWw4
Ult3VWx0VWx04
UltK4VWx0Sw==VWx0Sw8
UltKi5VWx0S2k=VWx0S2k8
UltKit6VWx0S2l0VWx0S2l08

Base64的作用

Base64 由 RFC 4648 定义,用 64 个可打印 ASCII 字符来表示任意字节:A–Z、a–z、0–9、+ 和 /。每 3 个字节(24 位)会被拆成 4 个 6 位数字,每个数字对应字符表中的一个字符。当输入长度不是 3 的倍数时,最后一组会用一个或两个 = 补位。结果总是比输入大约多 33%:每 3 个字节对应 4 个字符。

它的存在,是因为许多传输渠道原本只为文本设计。电子邮件(MIME)、HTML 和 CSS 中的 data: URL、携带图片或证书的 JSON 字段,以及 HTTP Basic 认证头,都用 Base64 来安全地传输二进制数据。它不是加密,也不会隐藏任何内容,解码不需要密钥。

Unicode与URL安全变体

Base64 编码的是字节而不是文字,所以文本必须先转换成字节。本工具始终使用 UTF-8,这是网络通用的编码:é 会变成两个字节,一个 emoji 则是四个字节。浏览器内置的 btoa 函数遇到 U+00FF 以上的任何字符都会报错,这就是简单的编码器处理带重音字符和 emoji 时会失败的原因;这里文本会先经过 TextEncoder 处理,解码时再用 TextDecoder 还原。如果解码出的字节不是有效的 UTF-8(例如图片、zip 文件),工具会以十六进制显示,而不是显示乱码。

标准 Base64 使用的 + 和 / 在 URL 和文件名中有特殊含义。RFC 4648 第 5 节的 URL 安全字符表把它们替换为 - 和 _,并且通常省略补位符。JSON Web Token 使用的正是这种形式。解码器同时支持两种字符表,也允许缺少补位符,所以你可以任意粘贴其中一种。

编码文件和图片

选择一个文件,工具会用 FileReader 在本地读取,并返回它的 Base64,或者带有该文件 MIME 类型的完整 data: URL,可直接粘贴到 img 标签或 CSS 背景中。内嵌图片能省掉一次 HTTP 请求,但体积会增加三分之一,而且无法单独缓存,因此适合小图标,不适合照片。如果需要图片预览以及现成的 HTML 和 CSS 代码片段,请使用图片转 Base64。

常见问题

为什么Base64编码结果比原内容更长?
每 3 个字节变成 4 个字符,所以输出大小约为输入的 4/3,再加上最多两个补位字符。非 ASCII 文本会更长,因为 UTF-8 每个字符占用两到四个字节。
末尾的=号是什么?
是补位。当输入长度不是 3 的倍数时,补位能让输出长度成为 4 的倍数。一个 = 表示最后一组有两个字节,两个 = 表示最后一组只有一个字节。
为什么解码时提示无效字符错误?
输入中含有字符表以外的内容,例如单词中间的空格、引号,或 URL 编码产生的 %。换行和缺少补位符是可以容忍的,其他字符则不行。
用Base64编码密码安全吗?
Base64 没有任何保护作用。HTTP Basic 认证就是以 Base64 发送 user:password,所以只能在 HTTPS 下使用。要保护机密信息,请使用真正的加密或哈希。
Base64和Base64url有什么区别?
只有两个字符和补位符的差别:Base64url 用 - 和 _ 代替 + 和 /,并且通常省略 =,这样结果无需转义就能放进 URL 和文件名。