Go Base64
最后修改时间 2024 年 4 月 11 日
在本文中,我们将展示如何在 Golang 中将二进制数据编码和解码为 Base64。
编码是将数据从一种形式转换为另一种形式的过程。解码是相反的过程。
当我们 G需要存储和传输二进制数据通过主要处理文本的媒体时,通常使用 Base64 编码方案。例如,Base64 编码用于电子邮件附件。
在 Go 中,我们使用 `encoding/base64` 包进行 Base64 编码和解码。它实现了 RFC 4648 中指定的 Base 编码。
以下是 Base 64 字母表。
Value Encoding Value Encoding Value Encoding Value Encoding 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P 32 g 49 x 16 Q 33 h 50 y
Go base64.StdEncoding.Encode
`base64.StdEncoding.Encode` 函数将源字节切片编码到目标字节切片。
func (*base64.Encoding).Encode(dst []byte, src []byte)
这是函数的语法。目标是第一个参数,源是第二个参数。
package main import ( "encoding/base64" "fmt" ) func main() { msg := "one 🐘 and three 🐋" fmt.Println(msg) data := make([]byte, base64.StdEncoding.EncodedLen(len(msg))) base64.StdEncoding.Encode(data, []byte(msg)) fmt.Println(data) encoded := string(data) fmt.Println(encoded) }
该程序将字符串编码为 Base64 编码
msg := "one 🐘 and three 🐋"
我们有一个包含两个表情符号的字符串。
data := make([]byte, base64.StdEncoding.EncodedLen(len(msg)))
使用 `base64.StdEncoding.EncodedLen` 函数可以返回输入缓冲区 Base64 编码的字节长度。
base64.StdEncoding.Encode(data, []byte(msg))
我们使用 `base64.StdEncoding.Encode` 对数据进行编码。
$ go run main.go one 🐘 and three 🐋 [98 50 53 108 73 80 67 102 107 74 103 103 89 87 53 ... 115 61] b25lIPCfkJggYW5kIHRocmVlIPCfkIs=
Go base64.StdEncoding.Decode
`base64.StdEncoding.Decode` 函数将源字节切片解码到目标字节切片。
package main import ( "encoding/base64" "fmt" "log" ) func main() { encoded := "b25lIPCfkJggYW5kIHRocmVlIPCfkIs=" fmt.Println(encoded) data := make([]byte, base64.StdEncoding.DecodedLen(len(encoded))) n, err := base64.StdEncoding.Decode(data, []byte(encoded)) fmt.Println(data) if err != nil { log.Fatal(err) } fmt.Println(string(data[:n])) }
该程序解码一个 Base64 编码的字符串。
encoded := "b25lIPCfkJggYW5kIHRocmVlIPCfkIs="
这是编码后的字符串。
data := make([]byte, base64.StdEncoding.DecodedLen(len(encoded)))
我们为缓冲区创建一个目标字节切片。
n, err := base64.StdEncoding.Decode(data, []byte(encoded))
数据使用 `base64.StdEncoding.Decode` 进行解码。
$ go run main.go b25lIPCfkJggYW5kIHRocmVlIPCfkIs= [111 110 101 32 240 159 144 152 32 97 110 100 ... 240 159 144 139 0] one 🐘 and three 🐋
Go Base64 编码/解码字符串
`base64.StdEncoding.EncodeToString` 函数返回字符串的 base64 编码。 `base64.StdEncoding.DecodeString` 返回 Base64 编码字符串表示的字节。
package main import ( "encoding/base64" "fmt" "log" ) func main() { msg := "one 🐘 and three 🐋" fmt.Println(msg) str := base64.StdEncoding.EncodeToString([]byte(msg)) fmt.Println(str) data, err := base64.StdEncoding.DecodeString(str) if err != nil { log.Fatal(err) } fmt.Println(data) fmt.Println(string(data)) }
该程序对字符串进行 Base64 编码和解码。
$ go run main.go one 🐘 and three 🐋 b25lIPCfkJggYW5kIHRocmVlIPCfkIs= [111 110 101 32 240 159 144 152 32 ... 32 240 159 144 139] one 🐘 and three 🐋
来源
在本文中,我们学习了 Golang 中的 Base64 编码。