概述

Base64编码,是我们程序开发中经常使用到的编码方法。因为base64编码的字符串,更适合不同平台、不同语言的传输(一个字符可能其他的系统没有)。它是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法,一句:将二进制数据文本化(转成ASCII)。

– 由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。

– 对二进制文件进行文本化后的传输
– 前后台交互时,经常使用base64,这样可以避免特殊字符传输错误

Linux下使用命令测试步骤:

1. cp /bin/ls .

2. base64 ls > 1.txt
3. 查看1.txt  =》 可读的文本数据
4. base64 -D 1.txt > myls  ==> 将文本数据解码为原来的ls数据, -D decode
5. ls -al 1.txt ./ls ./myls
=====
 duke ~$  ls -al 1.txt ./ls ./myls
-rwxr-xr-x  1 duke  staff  38704  3  6 14:49 ./ls
-rwxr-xr-x  1 duke  staff  38704  3  6 14:49 ./myls
-rw-r--r--  1 duke  staff  51609  3  6 14:49 1.txt
=====

6. chmod +x myls  => 添加执行权限
7. ./myls  ==》 与ls功能相同

字符集

普通的base64字符集
A-Z : 26
a-z : 26
0-9: 10
+, / : 2

64个
URL专用的base64字符集
A-Z : 26
a-z : 26
0-9: 10
-,_ : 2

64个

编码规则

MAn => 3 * 8 = 24 / 6 = 4

M =>  77 = 64 + 8 + 4 + 1 => 0100, 1101

Base64编码的数据比原来的字节数大。
由3字节 => 4字节
man =>twfu

当需要编码的数据不足时,使用等号(=)填充,解码时,会自动剔除

– base64就是一种基于64个可打印字符来表示二进制数据的方法。
– 编码后便于传输,尤其是不可见字符或特殊字符,对端接收后解码即可复原。
– base64只是编码,并不具有加密作用。

为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。

ASCII编码

go代码测试base64

package main

import (
	"fmt"
	"encoding/base64"
)

func main() {

	fmt.Printf("标准base64编码...\n")

	//info := []byte("国足宇宙第一!!!")
	info := []byte("https://studygolang.com/pkgdoc&hell?/?=")

	encodeInfo := base64.StdEncoding.EncodeToString(info)

	fmt.Printf("encode info 1   : %s\n", encodeInfo)

	fmt.Printf("URL base64编码...\n")

	urlEncodeInfo := base64.URLEncoding.EncodeToString(info)
	fmt.Printf("url encode info : %s\n", urlEncodeInfo)

}
标准base64编码...
encode info 1   : aHR0cHM6Ly9zdHVkeWdvbGFuZy5jb20vcGtnZG9jJmhlbGw/Lz89
URL base64编码...
url encode info : aHR0cHM6Ly9zdHVkeWdvbGFuZy5jb20vcGtnZG9jJmhlbGw_Lz89