1、介绍
Base64编码,是程序开发中经常使用到的编码方法。因为base64编码的自负床,更适合不同平台,不同语言的传输(一个字符可能其他系统没有)。他是一种基于64个可打印字符来表示二进制数据的标识方法。他通常用作存储,传输一些二进制数据编码方法,一句:将二进制数据文本化(转成ASCII)
2、作用
1、由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。
2、对二进制文件进行文本化后的传输
3、前后台交互时,经常使用base64,这样可以避免特殊字符传输错误
3、Base64编码表
4、示例说明
以下图的表格为示例,我们具体分析一下整个过程。
第一步:“M”、“a”、"n"对应的ASCII码值分别为77,97,110,对应的二进制值是01001101、01100001、01101110。如图第二三行所示,由此组成一个24位的二进制字符串。
第二步:如图红色框,将24位每6位二进制位一组分成四组。
第三步:在上面每一组前面补两个0,扩展成32个二进制位,此时变为四个字节:00010011、00010110、00000101、00101110。分别对应的值(Base64编码索引)为:19、22、5、46。
第四步:用上面的值在Base64编码表中进行查找,分别对应:T、W、F、u。因此“Man”Base64编码之后就变为:TWFu。
位数不足情况
上面是按照三个字节来举例说明的,如果字节数不足三个,那么该如何处理?
两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个Base64编码,第四组完全没有数据则用“=”补上。因此,上图中“BC”转换之后为“QKM=”;
一个字节:一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“=”补上。因此,上图中“A”转换之后为“QQ==”;
package main
import (
"encoding/base64"
"fmt"
)
func main(){
fmt.Println("标准base64编码...")
info := []byte("国足宇宙第一!!!")
encodeInfo := base64.StdEncoding.EncodeToString(info)
fmt.Printf("encode info 1:%s\n",encodeInfo)
fmt.Printf("URL base64...\n" )
encodeInfo = base64.URLEncoding.EncodeToString(info) //因为URL中有一些特殊字符,因此有专门的函数
fmt.Printf("URL encode info 1:%s\n",encodeInfo)
}