gpt4 book ai didi

go - 如何在 Golang 中生成唯一的随机字母数字标记?

转载 作者:IT王子 更新时间:2023-10-29 00:37:16 28 4
gpt4 key购买 nike

对于 RESTful 后端 API,我想生成唯一 url token 以用于对用户进行身份验证。

注册时提供的用于生成 token 的唯一数据是电子邮件地址。但是在生成 token 并将其发送给用户之后,我不需要解密收到的 token 来获取电子邮件或其他信息。因此加密可以是单向的。

最初我使用 bcrypt 来这样做:

func GenerateToken(email string) string {
hash, err := bcrypt.GenerateFromPassword([]byte(email), bcrypt.DefaultCost)
if err != nil {
log.Fatal(err)
}
fmt.Println("Hash to store:", string(hash))

return string(hash)

}

但由于 token 作为 url 参数(如 /api/path/to/{token})出现,我无法使用 bcrypt因为它会生成包含 / 的 token ,如下所示:

“$2a$10$NebCQ8BD7xOa82nkzRGA9OEh./zhBOPcuV98vpOKBKK6ZTFuHtqlK”

这会破坏路由。

所以我想知道在 Golang 中基于电子邮件生成一些独特的 16-32 字符字母数字标记的最佳方法是什么?

最佳答案

正如已经提到的那样,您做错了,这是非常不安全的。

  1. 使用加密包生成安全 token 。此 token 完全随机且不与任何电子邮件相关联。
func GenerateSecureToken(length int) string {
b := make([]byte, length)
if _, err := rand.Read(b); err != nil {
return ""
}
return hex.EncodeToString(b)
}
  1. 创建将此 token 映射到用户标识符的数据库表,并在 API 请求期间对其进行验证。

关于go - 如何在 Golang 中生成唯一的随机字母数字标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45267125/

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