英文:
Encrypt String in Golang in UTF-8 to put in postgres
问题
我正在使用Go语言中的加密功能,通过密码和口令对密码进行加密,然后将其以字符串形式存储在PostgreSQL数据库中。加密本身没有问题,但是当我尝试将其添加到数据库时,出现了一个错误,似乎是由于从[]byte类型转换为string类型导致加密的密码出错。
当我运行这段代码并尝试在数据库中添加行时,出现以下错误:
ERROR #22021 invalid byte sequence for encoding "UTF8"
我只是想在Go语言中找到一种简单的方法来加密字符串密码,并将加密后的字符串保存到PostgreSQL的表中。表中的列类型为VARCHAR,但如果有必要,我也可以更改该类型。谢谢!
英文:
I am using crypto in go to take a password and use a passphrase to encrypt the password and then store it as a string in a postgres sql database. The encryption works fine but when I try to add it to my database I get an error that seems to indicate that going from a []byte to a string type messes up the encrypted password.
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))
}
When I run this code and try to add the row in the database I get the error
ERROR #22021 invalid byte sequence for encoding "UTF8"
I am just looking for an easy way in go to encrypt a string password and save the encrypted string into a table in postgres. The column in the table is of type VARCHAR but I am willing to change that as well if that is for some reason the issue. Thanks for your time!
答案1
得分: 6
将其进行Base64编码:
return base64.StdEncoding.EncodeToString(ciphertext)
尽管字符串是一个字节数组,但并不是所有的字节序列都是有效的UTF-8字符串。Base64编码通常用于将二进制数据存储为文本。
英文:
Base64 encode it:
return base64.StdEncoding.EncodeToString(ciphertext)
Even though a string is a byte array, not all sequences of bytes are a valid UTF-8 string. Base64 encoding is commonly used to store binary data as text.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论