Mongodb Golang bcrypt哈希密码不匹配

Mongodb Golang bcrypt哈希密码不匹配,mongodb,go,bcrypt,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 }

因此,在下面的示例一中,我在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!")
}

在上面的示例中,密码确实匹配。两个示例中,两个日志的注释都包含相同的信息。我一点也不知道。非常感谢您的帮助:)

[]字节和字符串或符文数据类型之间有什么区别吗?您是否检查了用户的长度。密码+密码-原始密码和您从DB收到的密码-10小时。10小时。打字错误。我现在想揍一个婴儿。@GregAdams如果将来对其他人有帮助,你应该解释一下打字错误。@GregAdams,也许,你应该有一个像样的IDE,开始使用字符串常量。[]之间有什么区别吗字节、字符串或符文数据类型?您是否检查了用户的长度。密码+密码+原始密码和您从DB收到的密码?10小时。10小时。打字错误。我现在就想揍一个婴儿。@GregAdams如果这对以后的其他人有帮助,你应该解释一下打字错误是什么。@GregAdams,也许你应该有一个像样的IDE,开始使用字符串常量。