gpt4 book ai didi

go - 存储加密/rand 生成的字符串问题

转载 作者:可可西里 更新时间:2023-11-01 11:47:00 25 4
gpt4 key购买 nike

所以我有以下 go file(s)作为我用于散列密码的项目的一部分,我还编写了一些据我所知尚未失败的测试。

目前的问题是我正在尝试将密码和盐作为字符串存储在某些数据库中,每次我检索它们以与另一个字符串进行比较时,我都会不断从 golang 的 bcrypt 包中获取图片中的消息。我编写的测试运行良好并产生了适当的效果。我会提供一个 go playground 链接,但 bcrypt 包是标准库的一部分。

我知道 crypto/rand 中的乱码与最初的外观几乎相同,但我不确定数据库中是否有任何更改。我正在使用 redis fyi。

编辑:根据@3of3 的要求,我添加了DAO我项目中的代码。仅 bcrypt 解决方案也适用于此代码,但正如我在评论中所述,我的目标是坚持 Mozilla 的指南。

enter image description here

最佳答案

salt 不会通过 JSON 编码/解码往返,因为 salt 不是有效的 UTF8。

有几种方法可以解决这个问题:

  • Hex 或 base64 编码/解码哈希器中的盐。
  • 在整个代码中使用 []byte 类型作为 salt。 JSON 编码器使用 base64 对 []byte 值进行编码。
  • 使用 gob 编码器而不是 JSON 编码器。

Mozilla 建议将额外的 salt 与 bcrypted 密码分开存储。通过使用 bcrypt 密码存储额外的盐,系统并不比单独使用 bcrypt 更安全。

十六进制编码盐,改变

return string(p), string(salt), nil

return string(p), hex.EncodeToString(salt), nil

和改变

    s := []byte(salt)

    s, err := hex.DecodeString(salt)
if err != nil {
return err
}

关于go - 存储加密/rand 生成的字符串问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com