← 安全上网
ASTERXOR / 安全上网

看起来乱码,不代表已经加密

Base64 方便把字节当作文字传递。陌生的外观,却常让这项普通工作显得格外神秘。

普通文字与其 Base64 表示通过不需要密钥的变换相连。
唯一实际执行的变换,是对虚构无害句子进行 Base64 编解码;没有建立或测试加密系统。
安全上网ASTERXOR / LEON LEUNG

如果不需要秘密就能还原,这个变换究竟保护了什么?

混杂的字母和数字容易让人觉得私密,原因只是我们无法一眼读懂。但软件经常是为了传输而改变数据表示,而不是为了保密。看到保存值、二维码内容或附件时,这种区别很重要:不熟悉的文字提醒我们识别格式,并不能证明信息已受到保密保护。

换一套字母,不等于设立访问规则。
A USEFUL CONVERSION

软件为什么换一套字母

某些系统需要把任意字节放进只接受文字的通道。Base64 用一套规定的可打印字符表示若干组比特,便于在特定消息和格式中嵌入数据。这是一项实用的基础工作,就像换一种记数法写数字,而数值本身没有变。

规则是公开的,解码不需要秘密。只要拿到编码值并使用兼容解码器,就能恢复原始字节。Base64 可以包裹已经加密的字节,却不会让字节因此变成加密数据。如果有保密能力,那来自改变表示之前的另一项操作。

可以把它想成公开的转写表:换一种写法便于渠道承载消息,但任何拿到表的人都能读回原文。限制访问还需要其他机制。Base64 尤其容易让人误会,因为它的外观与某些真正安全系统使用的随机材料相似。

TRY THE SMALL CASE

二十二个字节,来回一次

我们在本地编码了虚构句子“Meet by the blue tree.”。它的 22 个 ASCII 字节变成了 32 个 Base64 字符。解码后,不用密码或密钥,就精确恢复了原来的 22 个字节。我们直接比较字节,因此结果不依赖显示出来的句子是否只是看着相似。

三个更小的样本可以看出填充规则:M 变成 TQ==,Ma 变成 TWE=,Man 变成 TWFu,输出长度都是四个字符。在这种标准带填充的表示中,等号补足不完整的分组,并不是密码标记。四个样本都成功往返。

表格显示 M、Ma、Man 和虚构句子的字节数、Base64 文本及编码后长度。
FIG 01四个无害输入都完整还原;22 字节的句子生成了 32 个字符。
READ THE SHAPE CAREFULLY

字符变多,不等于保护变强

标准带填充 Base64 的长度,是把输入按三个字节分组、不足一组向上补齐,再乘以四。这能解释短样本和长句子的长度。多出来的字符是表示方式的开销,不是经过测量的安全性或随机性提升。

脚本还在要求严格解码时拒绝了非法字符。这检查的是输入是否符合预期格式,不是发送者是谁,也不是内容是否安全。完全合规的编码同样可以承载错误、公开、私密或有害的信息;仅靠语法无法区分这些类别。

公式数的是输入字节,不是屏幕上的字母。原句恰好使用 ASCII,每个字符占一个字节;其他文字体系,甚至带重音的拉丁字母,都可能需要更多。讨论编码长度前,应先说明字符编码,否则双方都以为在数“字符”,实际单位却不同。

SEPARATE THE JOBS

保密回答的是另一个问题

正确的加密通过密码学密钥和可靠设计,使没有相应访问能力的一方无法获得内容。认证和完整性机制关注数据由谁产生、是否被改动。现代认证加密可以结合重要保护,但正确选择和实施它,不能靠临时拼凑的字符替换。

哈希又有另一项任务:生成摘要,帮助与可信的预期值比较精确内容。它通常不能解码还原原文,也不会自动隐藏仍存储在别处的源数据。有效的安全来自机制与需求相匹配,而不是挑选最难看懂的输出。

保护说法应对应具体流程。一份文件可以通过加密连接传输,在目的地以可读文本保存,又在导出时显示为 Base64;三件事可以同时成立。追问哪份副本、哪个阶段、哪个读者,能避免把一个令人安心的词扩展到整段旅程。

三张卡片说明编码、加密和认证分别回答什么问题。
FIG 02概念图区分表示、保密和真实性,实际只执行了编码。
DO NOT GUESS FROM APPEARANCE

同一种外壳,可以装不同内容

像 Base64 的值可能装着普通文字、图像、结构化消息或密文。某种令牌也可能包含可读字段,同时用独立签名保护完整性。能够读懂,并不意味着可以放心分享:即使部分内容容易解码,整个值仍可能授予访问权限。

不要为了好奇,把陌生的账户值粘贴进在线解码器。适当情况下,应参考服务文档,使用可信的本地检查流程。本次样本只有为实验编写的句子,不是会话令牌、恢复码或示例凭证,也没有检查任何账户材料。

安全的检查练习应从专门写下的测试文字开始,而不是从账户里复制来历不明的值。保留本地原始字节,再精确比较解码字节。格式不明或值可能赋予访问权时,应暂停并查发行方文档。好奇并不是把可能有权力的值交给在线解码网站的理由。

A CLOSER CHECK

字母、字节和字母表,是三项不同选择

第二个样本是用 UTF-8 编码的 café。这种拼写有四个 Unicode 码点,UTF-8 却占五个字节。标准 Base64 得到八字符的 Y2Fmw6k=,解码恢复原文。多出的字节来自重音字母的表示,不是额外保密。码点数量也不是所有视觉字符的通用计数。

接着用十六进制 FB FF 这两个无害字节比较字母表:标准 Base64 写成 +/8=,URL 安全变体写成 -_8=,各用对应解码器,都得到相同两个字节。符号变化是为适应容器,两种表示本身都不增加保密性或关于发送者身份的证据。

所以凭外观猜格式只能算起点。有些协议还规定填充或外围结构。应按文档选解码器;需要核验时,比较得到的字节。新增八项检查只覆盖这些确切样本,不覆盖所有宽松解码器或令牌格式。

café 样本有四个码点、五个 UTF-8 字节、八个 Base64 字符;两种字母表表示同样的 FB FF 字节。
FIG 03café 样本有四个码点、五个 UTF-8 字节、八个 Base64 字符;两种字母表表示同样的 FB FF 字节。
ASK FOR THE PROPERTY

把模糊标签换成具体问题

当产品声称信息受到保护,问清它指哪种属性:连接是否加密?存储副本是否加密?谁持有密钥,哪些参与方可以读取内容?这些问题描述的是系统和访问边界。一张乱码截图本身无法回答任何一个。

简单的文档分享,应使用具备清晰保护与分享控制的成熟工具,而不是改文件名或编码内容。同时核对接收者和即将发出的副本。只要称呼准确,编码依然很有用:它是可逆的字节传递方式,本身不附带保密承诺。

卡片区分已观察到的无密钥解码、未测试的保密性,以及关于密钥和访问的提问。
FIG 04样本证明了无需密钥的往返,不代表其他系统是否采用加密。
留一个想法带走

当文字换了外衣,问问里面究竟改变了什么。有时,诚实的答案只是:同样的字节换了一种写法。