在 Golang 中以 UTF-8 加密字符串以放入 postgres

Encrypt String in Golang in UTF-8 to put in postgres

我在 go 中使用 crypto 获取密码并使用密码加密密码,然后将其作为字符串存储在 postgres sql 数据库中。加密工作正常,但是当我尝试将它添加到我的数据库时,我收到一个错误,似乎表明从 []byte 到字符串类型会弄乱加密密码。

func Encrypt(password string, passphrase string) string {
    data := []byte(password)
    block, _ := aes.NewCipher([]byte(createHash(passphrase)))
    gcm, err := cipher.NewGCM(block)
    if err != nil {
        panic(err.Error())
    }
    nonce := make([]byte, gcm.NonceSize())
    if _, err = io.ReadFull(rand.Reader, nonce); err != nil {
        panic(err.Error())
    }
    ciphertext := gcm.Seal(nonce, nonce, data, nil)
    return string(ciphertext)
}

func createHash(key string) string {
    hasher := md5.New()
    hasher.Write([]byte(key))
    return hex.EncodeToString(hasher.Sum(nil))
}

当我 运行 此代码并尝试在数据库中添加行时,我收到错误消息

ERROR #22021 invalid byte sequence for encoding "UTF8"

我只是在寻找一种简单的方法来加密字符串密码并将加密的字符串保存到 postgres 中的 table 中。 table 中的列是 VARCHAR 类型,但如果出于某种原因这是问题,我也愿意更改它。感谢您的宝贵时间!

Base64 编码:

return base64.StdEncoding.EncodeToString(ciphertext)

尽管字符串是字节数组,但并非所有字节序列都是有效的 UTF-8 字符串。 Base64 编码通常用于将二进制数据存储为文本。