首页 » 信息技术 »

Base64编码的理解

2019年3月13日 / 7次阅读

  • 打开支付宝,搜索“ 529018372 ”,领取专属红包!每日支付每日领。

什么是Base64编码?

Base64编码,就是使用64个特别选出的字符来表示字符串。由于采用6bit编码,所以正好只需要64个字符。计算机系统的8bit标准byte长度,通过3个byte=24bit=4个Base64字符的方式进行转换。

为什么需要Base64编码?

有些网络传送渠道并不支持所有的字节编码,例如传统的Email邮件服务器,只支持可见字符的传送,像ASCII码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的解决方法就是在不改变传统协议的情况下,做一种扩展方案来支持任意二进制字节流的传送。把不可打印的字符通过可打印字符来表示,问题就解决了。Base64编码应运而生,Base64就是一种基于64个可打印字符来表示二进制数据的表示方法。

Base64的索引表

Base64的索引表

Base64的索引表

这个表,跟ASCII编码表,是完全不一样的。

base64编码,就是全部英文字母的大小写,加上10个数字,再加上+和/两个符号。

标准8bit字节流转换为Base64编码

标准8bit字节流转换为Base64编码

标准8bit字节流转换为Base64编码

每3个byte一组,转换成4个6bit的base64编码。

如果要编码的字节流不是3的倍数,最后会剩下1个或2个字节怎么办?

在进行Base64编码之前,先用\x00字节流在末尾补足,再在base64编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

用Python来做个要补=号的示例:

>>> import base64
>>> base64.b64encode(b'abcd')
b'YWJjZA=='
>>> base64.b64decode(b'YWJjZA==')
b'abcd'

abcd要补两个\x00,因此产生的base64编码有两个=号。(看到末尾带=号的字符串,就要想到可能是base64编码过的)

去掉base64编码的=号,如何解码?

由于=号字符也可能出现在Base64编码中,但=号用在URL、Cookie里面会造成歧义,所以,很多Base64编码后会把=去掉。去掉=号之后,如何解码?

因为Base64是把3个字节变为4个可显示字节,所以,Base64编码的长度永远是4的倍数,因此,只需要加上=号,把Base64字符串的长度变为4的倍数,就可以正常解码了。

什么是safe url的base64编码?

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

>>> base64.urlsafe_b64decode(b'xy-_')
b'\xc7/\xbf'

以上就是我对Base64编码的学习理解。

本文链接:http://www.maixj.net/ict/base64-20652

相关文章

评论是美德


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top