在数据库中保存并读取Golang中的byte []

问题描述:

我正在使用Golang中的API,使用Gorm作为ORM。目前我有一个[]字节领域的问题,我有它在我的结构定义为:在数据库中保存并读取Golang中的byte []

type Member struct { 
    MyField    []byte  `gorm:"column:MyField" schema:"-"` 
} 

然后,我要保存和读取该资源的方法,因此该值当我保存它是不同的以评估我正在阅读的内容。例如,现在用bcrypt生成散列密码,以12345尝试的结果是:

[36 50 97 36 49 48 36 46 56 98 88 72 82 71 113 66 100 65 105 103 70 119 114 97 73 77 99 78 117 106 54 78 103 88 68 49 56 110 103 112 105 86 
104 79 117 47 114 57 116 51 47 53 97 100 109 103 106 46 68 109] 

直到有一切正常,然后当我从数据库和打印是看重我得到读取寄存器:

[36 50 97 36 48 52 36 56 49 67 66 121 118 90 47 47 104 49 83 120 50 108 112 71 73 51 67 88 46 97 52 74 54 66 84 73 106 105 110 122 98 69 90 51 
78 113 67 66 49 103 50 56 116 47 57 120 78 103 109 54] 

他们不一样,为什么? 我用GORM创建表,并且该列的类型是在我的Postgres数据库如定义BYTEA

代码

要保存:

bs, err := bcrypt.GenerateFromPassword([]byte(Pass), bcrypt.DefaultCost)  

if err != nil { 
     fmt.Println("Hey error!") 
} 
user.MyField = bs 
db.Create(&user) 

阅读: db.First(&用户ID) fmt.Println(user.MyField)

我想你的问题是在db.First(&用户ID)错误ID。可能你得到错误的生。我试图重制错误,但我不能。以下代码工作正常。

bs, err := bcrypt.GenerateFromPassword([]byte("12345"), bcrypt.DefaultCost) 
expected := bs 

db.Create(&Member{MyField: bs}) 
var member Member 

db.First(&member) 
actual := member.MyField 

if !bytes.Equal(actual, expected) { 
    panic("fields are not equal") 
} 
+0

使用'bcrypt.CompareHashAndPassword'方法进行密码比较而不是'bytes.Equal'。 – jeevatkm

+0

我刚刚比较了散列,它是作者的问题,没有验证密码。 – bayrinat