在这篇文章中,我们展示了如何在Golang中对二进制数据与Base64进行编码和解码。
$ go version go version go1.18.1 linux/amd64
我们使用Go版本1.18。
编码是将数据从一种形式转换为另一种形式的过程。解码是相反的过程。
当我们需要在旨在处理文本的媒体上存储和传输二进制数据时,通常会使用Base64编码方案。例如,电子邮件附件中使用Base64编码。
在Go中,我们使用encoding/base64
包进行base64编码和解码。它实现了RFC4648指定的基本编码。
以下是Base64字母表。
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
转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=
转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 ð
GoBase64编码/解码字符串
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编码。
列出所有Go教程。