一篇文章,搞懂Base64编码原理

Base64的由来

我们知道,基础的ASCII码是用一个字节的低7位来表示英文的0-127个字符。

在英语中,用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。对于扩展ASCII码(128 -255),不同国家之间也不相同,Email只被允许传送ASCII字符,即一个8位字节的低7位,传统的邮件只支持可见字符的传送,像ASCII码的32个控制字符就不能通过邮件传送。直到1990年代初,许多程序和数据传输通道都假定所有字符都将表示为0到127(7位)之间的数字。

于是,Base64为了满足电子邮件中不能直接使用非ASCII码字符的规定,将8位2进制转为6位2进制重新编码。6位2进制可以表示64个不同的可见字符,Base64的名字由此得来。

这里也许会有人问,为什么是将8位转成6位,而不直接转为7位编码呢。在标准7位ASCII码中,前0-31个是控制字符,是不能通过邮件传输的,所以转成6位编码是比较合适的。当然在base家族中,有base64,base32,base16,base8等等。

Base64的算法原理

Base64不是加密算法,而是一种编码格式。它把3个8位字节(3x8=24)转化为4个6位的字节(4x6=24),之后在每个6位的前面补两个0,形成8位,即一个字节。

  • Base64编码表

    A-Z 26

    a-z 26

    0-9 10

    +/ 2

    = 一般加在编码末尾,表示补了多少个字节

示例

将“我W”使用base64编码。

  • step1:使用在线工具,将字符转为2进制。(这里使用UTF-8)

    “我”---------111001101000100010010001

    “W”---------01010111

  • step2:对2进制进行分组,每6个一组(不够6位就在后面补0),转为10进制。

    111001101000100010010001010101110000000000000000
    574034172148==

  • step3:从base64表中查找对应字符

    编码结束:5oiRVw==

    “我W”一共是4个字节,再在后面添加2个字节,使它成为3的倍数。

    在编码的末尾加上1个或2个=号,表示补了多少字节。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值