base64编码原理之示例分析编码的全过程

243 阅读4分钟
原文链接: mp.weixin.qq.com

BASE64的理论知识

BASE64是由64个基本字符组成,那么是哪64个基本字符?

在全世界通用的可见字符(62+2)组成64个字符

  • a~z 26个

  • A~Z 26个

  • 0~9 10个

  • +

  • /

在全世界通用语言中,单字符占用的最大字节数为3个字节(中文是2个字节,英文是1个字节),一个字节占8位,也就是按二进制来表示最低位00000000、最高位 11111111,转化为十进制,也就是0~255之间。

那么为什么是64个字符呢?接下来我们开始分析

上面讲到3个字节* 一个字节8位=24bit,也就是二进制来表示最低位00000000、最高位 11111111  

把这个重新编组,每6位一组共4组 4*6=24

为什么是6位一组呢?

 6和8的最小公倍数=24,很科学的一个数字

重排组后最小是000000 、最大是111111,转十进制就是 0 ~63 ,再一算就成了64个数。

编码 字符 编码 字符 编码 字符 编码 字符
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

通过64个字符如何进行编码的?

第一步:找到中文在操作系统的字符编码表中对应 十进制代码

第二步:把十进制值转换为二进制

第三步:对二进制进行重组

第四步:每一组的值再转换为十进制,去base64编码表找到其对应的字符,重新编码

下面我们按“零售云技术”进行手动进行base64编码

  1. 首先查看操作系统的字符编码

    windows系统中通过打开cmd输入chcp 可以查看活动代码页结果,然后去查看代码页字符集对照表(自己百度就不帖出来了)

  2. 根据代码页字符对照表中的字符集查找对应字符集编码表(我这里是GB2312),GB2312汉字编码字符集对照表自己去百度,网上很多,这里直接对搜索的结果进行帖图

    下面我们一个字一个字的搜(零)(售)(云)(技)(术)

    我们把所有的值都列出来

  • 零 C1E0+3

  • 售 CAD0+B

  • 云 D4C0+6

  • 技 BCB0+C

  • 术 CAF0+5

    以上我们找到的是16进制的数,然后分析转成十进制的数

  • 零 49632+3  = 49635

  • 售 51920+11 = 51931

  • 云 54464+6   = 54470

  • 技 48304+12 = 48316

  • 术 51952+5 = 51957

把十进制的值转化成二进制

49635=>1100000111100011

51931=>1100101011011011

54470=>1101010011000110

48316=>1011110010111100

51957=>1100101011110101 

然后按六位一组进行重组

110000 011110 001111 001010 110110 111101 010011 000110 101111 001011 110011 001010 111101 01 0000

因最一组不够六位使用0进行补齐,然后把每组转化成十进制

48 30 15 10 54 61 19 6 47 11 51 10 61 16

根据十进制的数字在base64码表中找对应的值

由于奇迹就开始了,把上面那些字符拼起来,然后最后加 == 字符结尾,请看下面是不是奇迹!!

wePK29TGvLzK9Q==

如果是奇迹,请关注微信公众号“零售云技术”

也可以通过其它工具进行验证其正确性是否准确!准确也请关注微信公众号“零售云技术”~~

-------------------------

欢迎关注微信公众号“零售云技术”,后续文章继续更新