Golang bcrypt哈希密码不匹配

时间:2016-07-29 01:21:29

标签: mongodb go bcrypt

所以我在mongodb中存储密码哈希,如下面的例子一样。如果我添加它然后在相同的函数中检索它说密码和哈希匹配,但是如果我尝试在另一个函数中检索它,两个值仍然是相同的,除了哈希密码与提供的密码不匹配。示例如下。

c := session.DB("users").C("accounts")

err = c.Find(bson.M{"username": user.Username}).One(&userInfo)
if err != nil {
    return err
}

log.Println(user.Password+Pepper)
log.Println(userInfo)

err = bcrypt.CompareHashAndPassword(userInfo.PWHash, []byte(user.Password+Pepper))
if err != nil {
    return err
}
return nil

密码上方的示例与哈希值不匹配。

orig := user.Password
user.PWHash, err = bcrypt.GenerateFromPassword([]byte(user.Password+Pepper), bcrypt.DefaultCost)

session, err := mgo.Dial("mongodb")
if err != nil {
    return err
}

defer session.Close()

if InTesting {
    err = session.DB("users").DropDatabase()
    if err != nil {
        return err
    }
}

c := session.DB("users").C("accounts")
err = c.Insert(user)
if err != nil {
    return err
}

var userInfo models.UserAuth
err = c.Find(bson.M{"username": user.Username}).One(&userInfo)
if err != nil {
    return err
}

log.Println(orig + Pepper)
log.Println(userInfo)

err = bcrypt.CompareHashAndPassword(userInfo.PWHash, []byte(orig+Pepper))
if err != nil {
    log.Println(err)
} else {
    log.Println("matched!")
}

在上面的示例中,密码确实匹配。两个示例都是2个日志的注释包含相同的信息。我完全没有想法。非常感谢任何帮助:)

0 个答案:

没有答案