Golang中Base64编码解码

在这篇文章中,我们展示了如何在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教程。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏