我正在尝试使用encoding/gob将编码后的数据从Golang存储到Postgres。我也在使用Gorm。
if err := json.NewDecoder(r.Body).Decode(model); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}目前,postgres数据库中的client_encoding设置为UTF8。下面是我用来编码的代码:
type payload struct {
Key []byte
Nonce *[nonceLength]byte
Message []byte
}
// Encrypt message
p.Message = secretbox.Seal(p.Message, plaintext, p.Nonce, key) // key set prior to this
buf := &bytes.Buffer{}
if err := gob.NewEncoder(buf).Encode(p); err != nil {
return nil, err
}
return buf.Bytes(), nil然后存储string(buf.Bytes()),它存储在数据库列中,该列当前为字符串类型。现在我是一个编码新手,我认为gob只是对我的数据库有一个不同的编码。
(pq: invalid byte sequence for encoding "UTF8": 0xff)
我一直遵循这个加密/解密的要点:https://gist.github.com/fuzzyami/f3a7231037166117a6fef9607960aee7
据我所知,除非使用gob,否则我不应该将结构编码到db中,在本例中为p。如果我说错了,请纠正我(在我找到这篇文章的时候找不到资源)。
有没有人能告诉我在Postgres中存储这些数据的正确方向,Postgres稍后会被解密?我显然不了解编码过程,也不完全确定从哪里开始阅读资源,所以感谢您的帮助!
发布于 2018-11-12 02:01:11
使用postgresql中的bytea列来存储[]byte,跳过到string的转换。
发布于 2018-11-12 04:58:35
看了一下https://golang.org/src/encoding/base64/example_test.go
能够使用
return base64.StdEncoding.EncodeToString(buf.Bytes()), nil它成功地存储在数据库中。
https://stackoverflow.com/questions/53251572
复制相似问题