Calvert's murmur

Golang 中的 Base64 編碼和解碼

2021-09-15

約 2223 字 / 需 12 分鐘閱讀

原文:CalliCoderBase64 Encoding and Decoding in Golang

Base64 是一種二進位轉文字編碼方案。它用可列印的 ASCII 字串格式對二進位資料進行編碼。當需要透過僅設計用來處理文字資料無法正確處理二進位資料的通訊媒介傳輸二進位檔案時,通常會使用它。

Go 內建支援對 Base64 編碼和解碼。在本文中,你將學到如何在 Go 中進行 Base64 編碼和解碼。

Go 中的 Base64 編碼

Go 的 encoding/base64 package 支援標準及與網址相容的 Base64 編碼和解碼。與網址相容的 Base64 編碼允許你將 Base64 編碼的字串安全的放在網址內。

讓我們來看個範例:

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {
	data := "Gol@ng is Awesome?~"

    // Standard Base64 Encoding
	encodedData := base64.StdEncoding.EncodeToString([]byte(data))
	fmt.Println(encodedData)

	// URL and filename-safe Base64 encoding
	urlSafeEncodedData := base64.URLEncoding.EncodeToString([]byte(data))
	fmt.Println(urlSafeEncodedData)
}
# Output
R29sQG5nIGlzIEF3ZXNvbWU/fg==
R29sQG5nIGlzIEF3ZXNvbWU_fg==

無填充的 Base64 編碼

如果你想進行原始、無填充的 Base64 編碼,那麼你可以使用 RawStdEncodingRawURLEncoding。它們與 StdEncodingURLEncoding 相同,但省略了填充字元。請注意,在實際使用上,你應該只使用上面範例中有填充的 Base64 編碼。

以下是無填充的 Base64 編碼範例:

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {
	data := "Gol@ng is Awesome?~"

	// Standard Base64 Encoding without padding
	encodedDataWithoutPadding := base64.RawStdEncoding.EncodeToString([]byte(data))
	fmt.Println(encodedDataWithoutPadding)

	// URL and filename-safe Base64 encoding without padding
	urlSafeEncodedDataWithoutPadding := base64.RawURLEncoding.EncodeToString([]byte(data))
	fmt.Println(urlSafeEncodedDataWithoutPadding)
}
# Output
R29sQG5nIGlzIEF3ZXNvbWU/fg
R29sQG5nIGlzIEF3ZXNvbWU_fg

Go 中的 Base64 解碼

以下範例示範了如何在 Go 中解碼 Base64 編碼的字串:

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {
	encodedData := "R29sQG5nIGlzIEF3ZXNvbWU/fg=="

	// Standard Base64 Decoding
	decodedData, err := base64.StdEncoding.DecodeString(encodedData)
	if err != nil {
		fmt.Printf("Error decoding Base64 encoded data %v", err)
	}
	fmt.Println(string(decodedData))

	// URL and filename-safe Base64 decoding
	urlSafeBase64EncodedData := "R29sQG5nIGlzIEF3ZXNvbWU_fg=="
	urlSafeData, err := base64.URLEncoding.DecodeString(urlSafeBase64EncodedData)
	if err != nil {
		fmt.Printf("Error decoding Base64 encoded data %v", err)
	}
	fmt.Println(string(urlSafeData))
}
# Output
Gol@ng is Awesome?~
Gol@ng is Awesome?~
Tags: Golang