Golang Base64 编码
在 Golang 中,Base64 编码是一种常见的数据编码方式,广泛用于数据存储、传输和加密处理。Go 语言标准库提供了 encoding/base64
包,便于开发者高效地进行 Base64 编解码操作。
目录
Base64 简介
Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方式,主要用于:
- 处理二进制数据在基于文本的协议(如 JSON、XML、HTML)中的传输
- 存储加密后的数据
- 处理二进制文件,如图片、音频数据等
Base64 采用的字符集如下:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
如果数据长度不是 3 的倍数,Base64 编码会在末尾填充 =
符号。
Golang Base64 编码与解码
Go 语言提供了 encoding/base64
包,可以方便地进行 Base64 编解码。
1. Base64 编码
使用 base64.StdEncoding.EncodeToString()
将字符串转换为 Base64 编码:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
// 原始数据
data := "Hello, Golang Base64!"
// Base64 编码
encoded := base64.StdEncoding.EncodeToString([]byte(data))
// 输出编码后的结果
fmt.Println("Base64 编码:", encoded)
}
2. Base64 解码
使用 base64.StdEncoding.DecodeString()
进行 Base64 解码:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
// Base64 编码数据
encodedData := "SGVsbG8sIEdvbGFuZyBCYXNlNjQh"
// Base64 解码
decoded, err := base64.StdEncoding.DecodeString(encodedData)
if err != nil {
fmt.Println("解码失败:", err)
return
}
// 输出解码后的结果
fmt.Println("Base64 解码:", string(decoded))
}
不同 Base64 编码方式
Golang 提供了三种不同的 Base64 编码方式:
-
标准 Base64(
StdEncoding
)- 使用
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
作为字符集 - 结尾可能包含填充字符
=
- 使用
-
URL 兼容 Base64(
URLEncoding
)- 使用
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
作为字符集 - 避免
+
和/
影响 URL 解析 - 适用于 URL 或 JSON 传输
- 使用
-
不带填充 Base64(
RawStdEncoding
&RawURLEncoding
)- 与
StdEncoding
或URLEncoding
类似 - 但不会在末尾添加
=
进行填充
- 与
1. URL 兼容 Base64 编码
package main
import (
"encoding/base64"
"fmt"
)
func main() {
data := "Hello, Golang Base64!"
// URL Base64 编码
encoded := base64.URLEncoding.EncodeToString([]byte(data))
// 解码
decoded, _ := base64.URLEncoding.DecodeString(encoded)
fmt.Println("URL Base64 编码:", encoded)
fmt.Println("URL Base64 解码:", string(decoded))
}
2. 无填充 Base64 编码
package main
import (
"encoding/base64"
"fmt"
)
func main() {
data := "Hello, Golang Base64!"
// 无填充 Base64 编码
encoded := base64.RawStdEncoding.EncodeToString([]byte(data))
// 解码
decoded, _ := base64.RawStdEncoding.DecodeString(encoded)
fmt.Println("无填充 Base64 编码:", encoded)
fmt.Println("无填充 Base64 解码:", string(decoded))
}
Base64 常见应用场景
-
图片和文件转换
- 例如,将图片转换为 Base64 以便嵌入 HTML、CSS 或 JSON 结构中
data:image/png;base64,xxxxxx
-
安全传输
- 编码数据避免传输过程中的格式破坏,如
+
变成空格
- 编码数据避免传输过程中的格式破坏,如
-
存储加密数据
- Base64 可用于存储密钥、JWT 令牌等
-
HTTP 认证
- 在
Basic Auth
认证中,用户名和密码会被 Base64 编码后传输
- 在
最佳实践
-
使用 URL 兼容 Base64(
URLEncoding
)- 避免
+
和/
在 URL 传输时出现问题
- 避免
-
避免过度使用 Base64
- Base64 编码后数据体积增大 33%(每 3 字节变成 4 字节)
- 如非必要,可使用二进制数据传输
-
安全性
- Base64 不是 加密手段,仅用于编码
- 若数据需要加密,建议结合
AES
、RSA
等加密算法
总结
- Base64 是一种文本编码方式,适用于二进制数据的文本传输
- Go 语言提供
encoding/base64
进行编码和解码 - 主要有
StdEncoding
、URLEncoding
、RawStdEncoding
等编码方式 - 适用于 URL、JSON、HTTP 认证、图片存储等场景