内容来自对 chagpt 的咨询
一、对字符串进行 base64 编解码
base64 编码
要在Go语言中对字符串进行base64编码,你可以使用标准库中的encoding/base64包。以下是一个简单的示例:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
data := "Hello, World!"
encoded := base64.StdEncoding.EncodeToString([]byte(data))
fmt.Println("Encoded:", encoded)
}
在Base64编码中,所有的字母数字都是安全的('A'到'Z','a'到'z'和'0'到'9')。但是,Base64有两个额外的字符:'+'和'/',它们在某些系统(例如URL)中可能并不安全。
因此,Base64提供了一个"URL和文件名安全"的变体Base64url(也称为URL安全的Base64),它使用"-"和"_"替换"+"和"/",消除了需要URL编码的需要。
这主要是在URL,Cookie,文件名等场景中使用Base64编码的时候需要考虑的问题,因为"+","/"和"="在这些环境中可能有特殊含义(例如URL中的路径分隔,查询字符串开始等)。
在Go语言中,可以使用base64.URLEncoding代替base64.StdEncoding达到URL安全的Base64编码,例如:
encodedURLSafe := base64.URLEncoding.EncodeToString([]byte(data))
或者先用 base64.StdEncoding 编码后,手动将 "+","/" 替换成 "-"和"_"
data := "Hello, World!"
encoded := base64.StdEncoding.EncodeToString([]byte(data))
fmt.Println("Encoded:", encoded)
encoded = strings.ReplaceAll(encoded, "/", "_")
encoded = strings.ReplaceAll(encoded, "+", "-")
fmt.Println("Encoded:", encoded)
base64 解码
如果使用 base64.StdEncoding.EncodeToString
进行编码,那么使用 base64.StdEncoding. DecodeString
进行解码;同理,如果使用 base64.URLEncoding.EncodeToString
进行编码,那么使用 base64.URLEncoding. DecodeString
进行解码;
package main
import (
"encoding/base64"
"fmt"
)
func main() {
// 需要进行编码的字符串
data := "hello world"
// 使用 base64.URLEncoding 对字符串进行 base64 编码
encoded := base64.URLEncoding.EncodeToString([]byte(data))
fmt.Println("Original String: ", data)
fmt.Println("Base64 Encoded String: ", encoded)
// 使用 base64.URLEncoding 进行解码
decodedByte, err := base64.URLEncoding.DecodeString(encoded)
if err != nil {
log.Fatal("Decode Error:", err)
}
// 将字节切片转换为字符串
decoded := string(decodedByte)
fmt.Println("Base64 Decoded String: ", decoded)
}
二、md5 编码
在 Go 语言中,我们可以使用 crypto/md5 库来对字符串或其他数据进行 MD5 编码。以下是一个示例代码段:
package main
import (
"crypto/md5"
"fmt"
"io"
)
func main() {
data := "Hello, World"
hash := md5.New()
io.WriteString(hash, data)
md5Code := fmt.Sprintf("%x", hash.Sum(nil))
fmt.Println(md5Code)
}
在上面的代码中,我们首先导入了 crypto/md5 和 fmt 库。我们创建了一个新的 MD5 hash,并将要进行编码的数据(在这种情况下是字符串 "Hello, World")写入 hash 中。然后我们使用 Sum 函数得到编码后的数据,并将其转化为十六进制的字符串形式打印出来。
另一种简单形式
package main
import (
"crypto/md5"
"fmt"
"io"
)
func main() {
data := "Hello, World"
fmt.Sprintf("%x", md5.Sum([]byte(data)))
}
标签:编解码,编码,fmt,base64,golang,encoded,data,md5
From: https://www.cnblogs.com/hi3254014978/p/17726242.html