Java—Base64编码原理

Base64作为java编程中常见的编码方式,经常在各种加密(例如AES、RSA等等)的过程中用来实现加解密中间产物可读性的重要工具,很值得我们去了解一下它的原理。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。这篇文章主要谈一谈Base64编码原理,细致理解一遍,能快就能够手写计算出字符串的Base64编码。

一、工具

ASCII表

Base64编码对照表

Base64编码不能缺少的两个对照表格,对照ASCII表格将需要进行编码的字符串转为二进制数值,进行移位操作后再将得到的十进制数值根据Base64编码表格转为所需要的结果。

二、原理

Base64编码的原理是将字符串每三个8bit位的二进制数值(即三个字节)分成四个6bit位的二进制数值,并将其左侧以0补全。

例如: 将字符Sim进行如下操作,绿色的0是补全8bit位的,对实际数值不影响。

这里实际上就是移位操作,

  1. 将第一个数右移位2位,得到第一个6位有效位二进制数

  1. 将第一个数左移位6位,得到第二个6位有效位二进制数的第一个和第二个有效位,将第二个数 右移位4位,得到第二个6位有效位二进制数的后四位有效位,两者取且得到第二个6位有效位二进制

  1. 将第二个数左移位4位,得到第三个6位有效位二进制数的前四位有效位,将第三个数 右移位6位,得到第三个6位有效位二进制数的后两位有效位,两者取且得到第三个6位有效位二进制

  1. 将第三个数左移位2位,得到第四个6位有效位二进制数

再将每个6位二进制数左侧补全两个0,这样就由一开始的3个8位二进制数值就变成了4个8位二进制数,也就是为什么进行Base64编码后大小是原来的4/3倍了。

注:当需要编码的字符串字节数并非为3的倍数,就在编码结果末尾使用等号“=”补全

三、示例

由于字符串字节长度并非为3的倍数,于是在结果后补上一个等号“=”

四、代码验证

  @Test
    void test() {
        String str = "Simon";
        String result = Base64.encodeBase64String(str.getBytes(StandardCharsets.UTF_8));
        log.info("编码后:"+result);
    }

猜你喜欢

转载自blog.csdn.net/Smion778/article/details/128849601