我正在编写一个Go OAuth应用程序,在其中我将生成一个UUID并将其用作accessToken,并将其返回给客户。我不想在数据库中保存裸露的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保存到具有唯一索引的列中。
答案 0 :(得分:1)
对于好的加密邮件或校验和,几乎不可能发生冲突的可能性。
良好的加密和校验和算法会生成加密的消息,这些消息与随机性是无法区分的。少了就意味着原始消息仍然存在。这意味着任何给定的访问令牌都可能映射到任何可能的加密消息。少做任何事情都会使攻击者猜出消息。
HMAC的加密强度取决于基础哈希函数的加密强度,其哈希输出的大小以及密钥的大小和质量。
虽然没有完全损坏,the security of SHA-1 has been significantly eroded。您应该使用SHA-256或更高版本。