为什么会有base64 以及base64的说明和使用

导读:本篇文章讲解 为什么会有base64 以及base64的说明和使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

为什么会有base64 以及base64的说明和使用

一、为什么会有base64

首先,我们要知道所有数据在电脑中最终都是二进制数存储的,而在取数据时,是用不同的解码方式,将数据解码成自己想要的数据。Ascii码是8位二进制数,范围是0-255gbk是16位二进制数,范围更大…

而现在所有的电脑都是以Ascii码编码方式存储的存储二进制数的,其他解码是在Ascii码的基础上解码的。Ascii33-127之间的值是可打印字符,可以在显示屏上显示出来,Ascii码的0-32128~255之间的值是不可打印字符,是一些控制符等等,这些在显示屏上是不能显示的。具体可以见下图:
在这里插入图片描述

1.主要原因:避免信息出错 和 查看二进制信息

(1)在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

(2)我们不知道二进制信息哪里出错了或者想查看二进制信息,有些二进制信息表示的信息无法打印出来。这时,我们需要一个二进制到字符串的转换方法。而Base64是一种最常见的二进制编码方法。

2.使用场景
  • 对证书来说,特别是根证书,一般都是作Base64编码的,因为它要在网上被许多人下载。
  • 电子邮件的附件一般也作Base64编码的,因为一个附件数据往往是有不可见字符的。
  • 比如http协议当中的key value字段的值,必须进行URLEncode ,
    因为一些特殊符号(等号或者空格)是有特殊含义的,造成混淆,解析失败,那么需要把这些值统一处理为可见字符,传输完再解析回来。
  • 网页中一些小图片可以直接以base64编码的方式嵌入。不用再用链接请求消耗资源。
  • 很多比较老的协议还是只支持纯文本的,比如SMTP协议。
    有时在一些特殊应用的场合,大多数消息是纯文本的,偶尔需要用这条纯文本通道传一张图片之类的情况发生的时候,就会用到base64

二、编码与加密

很多人都以为编码(Encoding)和加密(Encryption)是同一个意思。编码和加密都是对格式的一种转换,但是它们是有区别的。编码是公开的,比如下面要介绍的Base 64编码,任何人都可以解码;而加密则相反,你只希望自己或者特定的人才可以对内容进行解密。


三、base64的说明和使用

Base64是一种用64个字符来表示任意二进制数据的方法。

Base64的原理很简单,首先,准备一个包含64个可打印字符的数组:

['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']

3个字节一组的二进制转为一组4节,每节6位,即3*8 = 4*6
在这里插入图片描述
可以看见,用base64编码后,字符长度是原来的4/3

如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

import base64

a = base64.b64encode(b'beijing')
print(len(a), a)
b = base64.b64decode(a)
print(len(b), b)

# 结果:
12 b'YmVpamluZw=='
7 b'beijing'

这里一个字母是8位,所以3个字母base64编码是4个字符,这里7需要补两位,9*(4/3)=12

由于标准的Base64编码后可能出现字符+/,在URL中就不能直接作为参数,所以又有一种"url safe"base64编码,其实就是把字符+/分别变成-_

import base64

a = base64.urlsafe_b64encode(b'beij\xff\xffing')
print(len(a), a)
b = base64.urlsafe_b64decode(a)
print(len(b), b)

# 结果:
12 b'YmVpav__aW5n'
9 b'beij\xff\xffing'

参考资料:https://www.liaoxuefeng.com/wiki/1016959663602400/1017684507717184
https://www.cnblogs.com/cuihongyu3503319/p/5564265.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84740.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!