相同的字符串导致不同的 MD5 哈希
Same string results in different MD5 Hash
它非常简单。通行证不匹配。我找不到原因。
哈希函数
package utils
var hasher = md5.New()
func GetMD5Hash(text string) string {
fmt.Println(">> ", text, "<<")
hasher.Write([]byte(text))
return hex.EncodeToString(hasher.Sum(nil))
}
`
我第一次 restful 调用创建用户(注册)调用此方法。
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
}
现在我进行第二次 restful 调用以进行身份验证(登录)
验证用户方法
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
}
密码不匹配。
结果:
>> 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、相同的文本框和不同的按钮。
见解。请。
看起来好像你在一遍又一遍地写同一个(包级变量)hasher
,所以一开始它包含 'pass'
,然后是 'passpass'
,然后是 'passpasspass'
(当然是 []byte)所以结果会改变,因为底层字节正在改变。尝试将 var hasher = md5.New()
放入 GetMD5Hash
函数中。
它非常简单。通行证不匹配。我找不到原因。
哈希函数
package utils
var hasher = md5.New()
func GetMD5Hash(text string) string {
fmt.Println(">> ", text, "<<")
hasher.Write([]byte(text))
return hex.EncodeToString(hasher.Sum(nil))
}
`
我第一次 restful 调用创建用户(注册)调用此方法。
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
}
现在我进行第二次 restful 调用以进行身份验证(登录)
验证用户方法
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
}
密码不匹配。
结果:
>> 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、相同的文本框和不同的按钮。
见解。请。
看起来好像你在一遍又一遍地写同一个(包级变量)hasher
,所以一开始它包含 'pass'
,然后是 'passpass'
,然后是 'passpasspass'
(当然是 []byte)所以结果会改变,因为底层字节正在改变。尝试将 var hasher = md5.New()
放入 GetMD5Hash
函数中。