当前位置:网站首页 > 技术团队招聘与面试 > 正文

字符串转码技术介绍(字符串转码技术介绍图)



书接上回,在 记一个 Base64 有关的 Bug 一文里,我们说到了 Base64 的编解码器有不同实现,交叉使用它们可能引发的问题等等。

这一回,我们来对 Base64 这一常用编解码技术的原理一探究竟。

Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于 2^6=64,所以每 6 个比特为一个单元,对应某个可打印字符。3 个字节有 24 个比特,对应于 4 个 Base64 单元,即 3 个字节可由 4 个可打印字符来表示。

——维基百科

它不是一种加解密技术,是一种简单的编解码技术。

Base64 常用于表示、传输、存储二进制数据,也可以用于将一些含有特殊字符的文本内容编码,以便传输。

比如:

  1. 在电子邮件的传输中,Base64 可以用来将 binary 的字节序列,比如附件,编码成 ASCII 字节序列;
  2. 将一些体积不大的图片 Base64 编码后,直接内嵌到网页源码里;
  3. 将要传递给 HTTP 请求的参数做简单的转换,降低肉眼可读性;

    注:用于 URL 的 Base64 非标准 Base64,是一种变种。

  4. 网友们在论坛等公开场合习惯将邮箱地址 Base64 后再发出来,防止被爬虫抓取后发送垃圾邮件。

标准 Base64 里的 64 个可打印字符是 ,分别依次对应索引值 0-63。索引表如下:

图片

编码时,每 3 个字节一组,共 8bit*3=24bit,划分成 4 组,即每 6bit 代表一个编码后的索引值,划分如下图所示:

图片

这样可能不太直观,举个例子就容易理解了。比如我们对 进行编码:

图片

可以看到 编码后变成了 。

如果待编码内容的字节数不是 3 的整数倍,那需要进行一些额外的处理。

如果最后剩下 1 个字节,那么将补 4 个 0 位,编码成 2 个 Base64 字符,然后补两个 :

图片

如果最后剩下 2 个字节,那么将补 2 个 0 位,编码成 3 个 Base64 字符,然后补一个 :

图片

讲完原理,我们就可以动手实现一个简易的标准 Base64 编码器了,以下是我参考 Java 8 的 java.util.Base64 乱写的一个 Java 版本,仅供参考,主要功能代码如下:

 

这部分源码我也上传到 GitHub 仓库 https://github.com/mzlogin/spring-practices 的 base64test 工程里了。

在电子邮件中,根据 RFC 822 规定,每 76 个字符需要加上一个回车换行,所以有些编码器实现,比如 sun.misc.BASE64Encoder.encode,是带回车的,还有 java.util.Base64.Encoder.RFC2045,是带回车换行的,每行 76 个字符。

除了标准 Base64 之外,还有一些其它的 Base64 变种。

比如在 URL 的应用场景中,因为标准 Base64 索引表中的 和 会被 URLEncoder 转义成 形式,但 是 SQL 中的通配符,直接用于数据库操作会有问题。此时可以采用 URL Safe 的编码器,索引表中的 被换成 ,比如 java.util.Base64.Encoder.RFC4648_URLSAFE 就是这样的实现。

  • https://zh.wikipedia.org/zh-hans/Base64
  • https://www.liaoxuefeng.com/wiki/5344/2576
到此这篇字符串转码技术介绍(字符串转码技术介绍图)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 程序员 面试 八股文(程序员面试八股文有什么)2025-04-20 22:27:05
  • jvm内存结构面试题(jvm的内存结构 面试)2025-04-20 22:27:05
  • jvm内存结构面试题(jvm 内存结构)2025-04-20 22:27:05
  • 存储过程 面试题(存储过程笔试题)2025-04-20 22:27:05
  • 程序员 面试 八股文(程序员面试八股文合集)2025-04-20 22:27:05
  • max3232eeue中文技术手册(max3232cse中文资料)2025-04-20 22:27:05
  • 路由守卫面试题(路由守卫三个参数)2025-04-20 22:27:05
  • max31855中文手册(max3232eeue中文技术手册)2025-04-20 22:27:05
  • xpac客服(xps客服电话技术支持)2025-04-20 22:27:05
  • 电力104协议招聘(电力招聘2021)2025-04-20 22:27:05
  • 全屏图片