Base64原理浅析

一、Base64概念

按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。

二、Base64作用

我们知道在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输,base64特别适合在http,mime协议下快速传输数据。

三、Base64原理

Base64的原理很简单,所谓Base64,就是说选出64个字符(小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/")作为一个基本字符集。然后,准备一个包含64个字符的数组,最后其他所有符号都转换成这个字符集中的字符。数组:

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']复制代码

转换过程

具体来说,转换方式可以分为四步,如图所示:

第一步,将每三个字节作为一组,一共是24个二进制位。

第二步,将这24个二进制位分为四组,每个组有6个二进制位。

第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。

第四步,根据下表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。

0 A  17 R   34 i   51 z

  1 B  18 S   35 j   52 0

  2 C  19 T   36 k   53 1

  3 D  20 U   37 l   54 2

  4 E  21 V    38 m   55 3

  5 F  22 W   39 n   56 4

  6 G  23 X    40 o   57 5

  7 H  24 Y    41 p   58 6

  8 I   25 Z    42 q   59 7

  9 J   26 a    43 r   60 8

  10 K  27 b   44 s   61 9

  11 L  28 c   45 t   62 +

  12 M  29 d   46 u   63 /

  13 N  30 e   47 v

  14 O  31 f   48 w   

  15 P  32 g   49 x

  16 Q  33 h   50 y

实践

abc这三个字符转换为Base64的过程:

字符串      a        b         c
ASCII      97       98        99
8bit   01100001   01100010  01100011
6bit    011000     010110    001001   100011
十进制      24       22         9         35
对应编码     Y        W         J          j复制代码

因此“abc”的base64编码是:YWJj

把"严"这个字符转换为Base64的过程:

"严"的utf-8编码为E4B8A5,写成二进制就是三字节的"11100100 10111000 10100101"

字符串      严
8bit   11100100 10111000 10100101
6bit   00111001 00001011 00100010 00100101
十进制      57      11       34       37
对应编码     5       L        i        l复制代码

因此“严”的base64编码是:5Lil

现在还有一点小问题,当转换到最后, 最后的字符不足3个字符咋办, 如果不足三个字符的话,我们直接在最后添加=号即可, 具体可以参考以下两个字符串转换案例:

因而 A的base64编码是: QQ==



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值