设备与系统问题

Base64不是加密:它实际在做什么

Base64是编码,不是加密。为什么它藏不住密码、为什么会变大,以及如何解码。

简要回答

Base64是编码,不是加密。它把二进制变成面向文本的系统可以存储或发送的文字形式。

拿到Base64文本的人通常就能解码。不需要密码或密钥。

不要用Base64保护密码、API密钥、访问令牌、私信或其他秘密。它是表示工具,不是安全机制。

字符串看起来乱,并不等于已加密。Base64只改变字节写成文本的方式。

Base64实际在做什么?

Base64用有限的ASCII编码二进制:A–Z、a–z、0–9、+ 和 /。可用 = 填充,使输出长度是4的倍数。填充并非总有——短输入可能有一个或两个 =,有些格式会省略。

Hello

Hello

Base64

SGVsbG8=

解码 SGVsbG8= 会再次得到 Hello。这一来回不需要密钥。

  • 原始数据
  • Hello
  • Base64编码
  • SGVsbG8=
  • Base64解码
  • Hello
Base64可通过解码还原。拿到文本的人通常就能做。

Base64和加密有何不同?

Base64用于表示和兼容,不隐藏内容。加密用于保密,并使用密码学密钥材料。解码Base64不是解密。公钥系统也使用密钥;应说“合适的密码学密钥”,而不是“每种加密都共用一个秘密”。哈希是第三种概念:摘要,不是可逆编码。

  • 编码
  • 没有密钥
  • 任何人都能还原
  • 加密
  • 密码学保护
  • 解密需要正确的密钥
编码改变表示。加密旨在让内容保密。

三种不同的工作:

方法 主要目的 是否需要秘密
Base64 把数据编码成文本 否
加密 保护机密性 是 / 密钥材料
哈希 单向摘要 无法解密

Base64安全吗?

Base64本身不提供机密性。文本可能显得不透明,但那不是安全功能。普通解码器就能还原字节。这并不表示“Base64作为技术不安全”。它是普通编码,不是安全机制。安全取决于周围的系统和控制。

能用Base64隐藏密码或API密钥吗?

不能当作保护。把密码、API密钥、访问令牌或私人数据编成Base64并不会保护它们。拿到编码字符串的人通常就能解码。需要保密时,使用真正的密钥存储和加密。

既然不是加密,为什么还用Base64?

期望文本的系统往往带不了原始二进制。Base64用来在文本格式中表示二进制、嵌入小的二进制资源、经纯文本通道传送字节、构建Data URL、出现在部分邮件/MIME场景,以及在架构要求Base64时填充API载荷。API用Base64不是“为了安全”,而是为了兼容。

为什么Base64会让数据变大?

标准带填充的Base64把3个输入字节映射成4个字符。长度是 4 × ceil(n / 3),n是输入字节数。3字节变成4字符,6字节变成8字符。对较大的原始载荷大约大33%,约三分之一。小输入因填充看起来不同:1字节变成 QQ==(4个字符)。JSON引号、Data URL前缀、压缩或额外传输编码还会改变存储或发送的大小。Base64不压缩数据。

什么是Base64URL?

Base64URL是同一种编码的、对URL和文件名更安全的变体——不是加密。+ 变成 -,/ 变成 _,填充常被省略。Base64 编码解码 可以编解码标准Base64和Base64URL。填充规则取决于规范。本工具不是JWT解码器。

Base64能编码图片和文件吗?

能。图片、PDF和其他二进制文件可以变成Base64文本表示。Base64不压缩这些文件。编码后的文本通常比原始字节更大。

什么是Base64 Data URL?

Data URL可以把媒体类型、编码标记和编码后的字节放在一个字符串里:

data:image/png;base64,...

对小资源很方便。把大文件放进Data URL并不总是好主意:字符串变长,页面可能变慢。把它当作取舍,而不是默认做法。

编码、加密与哈希

编码(包括Base64)用于表示,无需秘密即可还原。加密用于保密,涉及密码学密钥材料。哈希产生一般设计为单向的摘要。输出长度取决于算法——SHA-256和SHA-512大小不同。哈希生成 可以展示这些摘要;它不加密,也不代替Base64做编码。

常见的Base64误用

把Base64当成加密
它只改变字节作为文本的样子。

把秘密存成明文式Base64
拿到编码值的人就能解码。

以为Base64会压缩数据
不会。文本形式通常更大。

忘记体积增加
大型原始载荷按大约多三分之一来规划。

混淆Base64与Base64URL
字母表不同。解码器可能拒绝错误变体。

用错误的字符编码解码
Base64还原的是字节。文本仍需要匹配的编码,通常是UTF-8。

以为 = 总会出现
填充只在需要时使用。有些字符串没有。

为什么Unicode文本会给Base64带来问题?

Base64处理的是字节,不是字符。文本必须先变成字节——通常是UTF-8。韩文、日文、阿拉伯文和表情需要这一步。浏览器的 btoa() 处理Unicode字符串可能失败。Base64 编码解码 编码UTF-8字节,因此这类文本可以来回转换。若用错误字符集解码,Base64可能有效,文字仍会看起来不对。

不是锁

Base64不提供机密性。拿到编码值的人通常就能解码。不要把看起来乱的文本当成受保护的秘密。

在浏览器中编码或解码Base64

NEXNARA Base64 编码解码 在本地转换UTF-8文本和文件。

你可以编解码标准Base64和Base64URL,把文件变成原始Base64或Data URL,再把Base64或Data URL变回下载。无效输入会被拒绝而不是崩溃。空格被忽略;缺失的填充会补上。

超过10 MB的文件可能让标签页变慢。超过32 MB的文件不会在浏览器中处理。

Base64处理本身在浏览器中完成。此工具不会把文本或文件发送到NEXNARA服务器。广告和其他站点功能仍使用网络;那与处理分开。

需要编码或解码Base64?打开 Base64 编码解码,粘贴文本或放入文件。

FAQ

Base64是加密吗?

不是。Base64是编码。它改变表示。它不保护机密性。

Base64安全吗?

Base64不是安全机制。它是普通编码。拿到文本的人通常就能解码。安全取决于系统的其余部分。

不用密码也能解码Base64吗?

能。标准解码器就够。Base64本身不需要密码或密钥。

为什么Base64会增加文件大小?

标准带填充的Base64中,每3字节变成4个字符(长度 4 × ceil(n / 3))。对较大的原始载荷大约多33%。很小的输入上,填充会改变比例。

Base64和Base64URL有何不同?

Base64URL用 - 和 _ 代替 + 和 /,并常常去掉 = 填充。两者都是编码。Base64 编码解码 支持两种字母表。

Base64能编码图片和文件吗?

能。结果是文本,不是更小的文件。在 Base64 编码解码 中用文件模式得到原始Base64或Data URL。文件留在浏览器里。