75

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

 5 years ago
source link: https://mp.weixin.qq.com/s/IAcu5xNjKEq4Zwh6uRkgBA?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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 可以查看活动代码页结果,然后去查看代码页字符集对照表(自己百度就不帖出来了)

    7RNvYb2.jpg!web

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

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

    UNNfy2i.jpg!web

    FrI3MvZ.jpg!web

    7Jz6ny3.jpg!web

    IVziQrF.jpg!web

    VvYJviV.jpg!web

    我们把所有的值都列出来

  • 零 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 0011 11 001010 110110 11 1101 010011 000110  101111 001011 1100 11 001010 111101 01 0000

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

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

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

67VVnir.png!webn2UfIfb.png!webzmIRRza.png!webF3aAb2Q.png!webbmau2qM.png!webzYFRRbq.png!webFzma6fA.png!webaUrQbaq.png!webJNjqEbf.png!webveqUVjr.png!webFVJrAvr.png!webqQ36jyq.png!webZnYniyF.png!webaQryErJ.png!web

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

wePK29TGvLzK9Q==

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

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

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

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

jUN7z2F.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK