go - UUID 的 Sha1 hex - 用作访问令牌
问题描述
我正在编写一个 Go OAuth 应用程序,其中我正在生成一个 UUID 并将其用作 accessToken,并将其返回给客户。我不想在 DB 中保存裸 accessToken,因为它长期有效。所以我使用 Sha1 生成哈希并将其保存如下
import "github.com/pborman/uuid"
accessToken := uuid.NewRandom()
mac := hmac.New(sha1.New, mysecretkey)
mac.Write([]byte(accessToken)
signed := mac.Sum(nil)
accessTokenDB hex.EncodeToString(signed)
通过使用 uuid 作为 accessToken,我的碰撞概率非常低。我想知道 accessTokenDB 是否也会给出同样非常低的碰撞概率。我将 accessTokenDB 保存到具有唯一索引的列中。
解决方案
对于良好的加密消息或校验和,冲突的可能性几乎是不可能的。
良好的加密和校验和算法会产生与随机性无法区分的加密消息。任何更少都意味着原始消息的某些内容仍然存在。这意味着任何给定的访问令牌同样可能映射到任何可能的加密消息。任何更少的东西都会让攻击者猜测消息。
HMAC 的加密强度取决于底层散列函数的加密强度、其散列输出的大小以及密钥的大小和质量。
虽然它并没有完全被破坏,但 SHA-1 的安全性已被严重削弱。您应该使用 SHA-256 或更好。
推荐阅读
- javascript - 从搜索查询中删除括号
- javascript - 格式化日期列表并添加到元素列表
- vba - AddressOf 产生错误 ActiveX 自动化:没有这样的属性或方法
- sql - 将两行合二为一
- ansible - Ansible,位于防火墙后面并具有动态 IP 的主机管理
- r - 在同一目录中的多个二进制矩阵中查找 0 的数量?
- python - 从纬度经度坐标以矢量化方式(无循环)构建距离矩阵
- xamarin - 如何验证 Xamarin 中是否存在 Android Layout Resource Xml?
- java - Java - 当一个全局变量被声明并用一个值初始化时,对象创建时会发生什么?
- powershell - 如何使用 Powershell 在没有 Mode、LastWrite 等的情况下导出 CSV 文件中的目录文件?