相同的字符串会导致不同的MD5哈希

时间:2018-04-27 19:13:58

标签: rest go md5

非常简单明了。传球不符合。我找不到原因。

散列函数

package utils
var hasher = md5.New()

func GetMD5Hash(text string) string {

    fmt.Println(">> ", text, "<<")
    hasher.Write([]byte(text))
    return hex.EncodeToString(hasher.Sum(nil))
}
`  

我进行第一次休息调用以创建用户(注册)调用此方法。

func CreateUser(id bson.ObjectId, email string, password string) bool {
    var user User
    user.ID = id
    user.Email = email
    user.Password = utils.GetMD5Hash(password)

    // fmt.Println("In Create User:", password, user.Password)

    err := userCollection.Insert(&user)

    if err != nil {
        log.Println("Error while CreateUser")
        return false
    }
    return true
}

现在我进行第二次休息呼叫以进行身份​​验证(登录)

验证用户方法

func AuthenticateUser(email string, password string) bool {
    user := GetUserByEmail(email)

    var u User

    u.Password = utils.GetMD5Hash(password)
    fmt.Println("In Authenticate:", password, u.Password)
    fmt.Println(u.Password, user.Password)

    if u.Password == user.Password {
        return true
    }
    return false
}

PASSWORDS DONT MATCH。

结果:

>>  pass <<
In Authenticate: pass 1a1dc91c907325c69271ddf0c944bc72
1a1dc91c907325c69271ddf0c944bc72 1a1dc91c907325c69271ddf0c944bc72
>>  pass <<
{ObjectIdHex("5ae3746e1b2a612417149bca") []}
>>  pass <<
In Authenticate: pass dbe4a8e3a3b93ed3101bace4bc19fc70
dbe4a8e3a3b93ed3101bace4bc19fc70 078bbb4bf0f7117fb131ec45f15b5b87
>>  pass <<
{ObjectIdHex("5ae374a31b2a612417149bcb") []}
>>  pass <<
In Authenticate: pass c4e6ffe7c63bb65e68521293416c96a2
c4e6ffe7c63bb65e68521293416c96a2 1bdfd5f0b03c0d80557384602303c690
>>  pass <<
In Authenticate: pass c6d90629ad5c6b8edbe479340d5bed6b
c6d90629ad5c6b8edbe479340d5bed6b 1bdfd5f0b03c0d80557384602303c690
>>  pass <<
In Authenticate: pass 5b54f4793a13c985b4f4275980542496
5b54f4793a13c985b4f4275980542496 1bdfd5f0b03c0d80557384602303c690

如果不清楚,我实际上反复提出相同的请求,并且每次都会产生新的MD5Hash。 此外,注册和登录过程都使用相同的UI,相同的文本框使用不同的按钮。

洞察。请。

1 个答案:

答案 0 :(得分:3)

好像你正在反复编写(包级别变量)hasher,因此首先它包含'pass',然后是'passpass',然后是{{1 (当然是[]字节)所以结果会改变,因为底层字节正在改变。尝试在'passpasspass'函数中放入var hasher = md5.New()