ZetCode

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)

这是函数的语法。目标是第一个参数,源是第二个参数。

main.go
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` 函数将源字节切片解码到目标字节切片。

main.go
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 编码字符串表示的字节。

main.go
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 🐋

来源

Go encoding/base64 包 - 参考

在本文中,我们学习了 Golang 中的 Base64 编码。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面有十多年的经验。

列出所有 Go 教程