分享这篇文章
继续阅读
很多开发者第一次接触 Base64 时,会把它和加密混在一起。Base64 只做编码:把二进制数据转换成一组可打印字符,方便它通过只接受文本的通道传输。任何人拿到 Base64 字符串,都可以把它还原成原始字节。
Base64 解决的是二进制数据在文本环境中的传输问题。早期邮件协议、URL 参数、JSON 字段和部分配置文件更适合处理可打印字符。图片、压缩包、证书、签名结果这些内容本质上都是字节序列,直接放进文本协议里容易遇到控制字符、换行、编码转换和转义问题。
Base64 把这些字节映射成 A-Z、a-z、0-9、+、/ 以及填充符 =。传输方拿到的是普通文本,接收方再把文本解码回原始字节。
Base64 每次读取 3 个字节,也就是 24 个比特。编码器把这 24 个比特切成 4 组,每组 6 个比特。6 个比特最多表示 64 个值,所以它们可以对应到 64 个字符。
这个规则也解释了体积变化:3 个原始字节会变成 4 个文本字符。编码后内容通常会增加约 33%。如果原始数据长度不能被 3 整除,编码器会用 = 补齐结尾。
因此,data:image/png;base64,... 适合很小的图标或内联资源,不适合大图、长音频或视频。大文件转成 Base64 后会增加传输体积,还可能阻塞 CSS、HTML 或 JSON 的解析。
Base64 不隐藏信息。浏览器控制台、命令行、在线工具或几行代码都能解码它。不要用 Base64 存密码、API Key、Token 或其他敏感信息。
它的正确用途包括:在 JSON 中传输小段二进制内容、嵌入小图片、处理证书或签名的文本表示、把字节数据放进只接受文本的字段。只要需求涉及保密,就应该使用哈希、加密、签名或访问控制,而不是 Base64。