Base64编码原理

Base64编码源于电子邮件传输,用于非ASCII内容的表示。它将8比特字节数据拆分为6比特片段,用64个可打印字符表示。Python中可以通过自写编码过程或使用内置base64库实现编码。
摘要由CSDN通过智能技术生成

Base64编码原理

一、Base64的由来

电子邮件刚问世的时候,只能传输英文,但后来随着用户的增加,中文、日文等文字的用户也有需求,但这些字符并不能被服务器或网关有效处理,为解决这一问题,最好的方案是在不改变传输协议的基础上,做一种扩展方案来支持非ASCII内容传输,把非 ASCII 字符用ASCII来表示,Base64编码应运而生。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。

二、什么是Base64?

Base64 是一种编码方式,最早出现在电子邮件传输协议中。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

三、Base64编码原理

Base64 将8比特位为一个单元的字节数据拆分为以6个比特位为一个单元的二进制片段,不足6个比特位的在后面补0,在转为字符后补0的位置以=表示,2个0替换一个=号。每6个比特位单元对应Base64索引表中的一个字符,这样最终构成一个 超过编码前字节数据33% 的字符串。

Base64索引图如下图所示:

Base64索引表
ASCII表如下图所示:

img
举个栗子:

ABC三个字符进行base64编码,编码过程如下:

文	本:		A					B					C
ASCII码:	65					66					67
8bit位:	 	01000001			01000010	 		01000011
<-----------------------将8bit位化为6bit位----------------------->
6bit位:		010000		010100		001001		000011
Base64索引:	16			20			9			3
Base64编码:	Q			U			J			D
8bit位:010000010100001001000011
6bit位:010000010100001001000011
3*8=24		24/6=4
8bit位刚好能化为6bit位,不要补0.

注意:
ASCII码到 8bit位之间,是将ASCII转化位8位的二进制。6bit位到Base64索引之间,是将6位的二进制转化为十进制。

abcd四个字符进行base64编码,编码过程如下:

文	本:			a			b			c			d
ASCII码:		97			98			99			100
8bit位:	 	01100001	 01100010	 01100011	 01100100
<----------------------将8bit位化为6bit位---------------------->
6bit位:	   011000	010110	001001	100011	011001	000000
Base64索引:	24		  22	  9		 35		  25	  0
Base64编码:	Y		  W	 	  J		 j 		  Z		  A==
8bit位:01100001011000100110001101100100
6bit位:011000010110001001100011011001000000
4*8=32	32/6=5*6 + 2
8bit位化为6bit位时,还差4位才能补齐最后的6位,因此在末尾补了4个0,当6bit位根据Base64索引表化为字符后需要在末尾补两个'==',一个'='代表补了两个0。

四、通过Python实现Base64编码

方案一:通过编码过程自己写Base64编码

b64_dict = {
   
    0: 'A', 17: 'R', 34: 'i', 51: 'z',
    1: 'B', 18: 'S', 35: 'j', 52: '0',
    2: 'C', 19: 'T', 36: 'k', 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值