我正在尝试生成一个随机令牌,我可以在实现重置密码功能时使用它。这个(http://play.golang.org/p/mmAzXLIZML)是令人眼花缭乱且无功能的:(我第一次尝试的代码。它不能正常工作,因为它一遍又一遍地生成相同的令牌(其中)我假设是时间不变的函数。。如何使用md5生成随机令牌,每次都会改变?
package main
import "fmt"
import "strconv"
import "time"
import "crypto/md5"
import "io"
func main() {
time := strconv.FormatInt(time.Now().Unix(), 10)
fmt.Println(time)
h := md5.New()
io.WriteString(h, time)
fmt.Printf("%x", h.Sum(nil))
}
答案 0 :(得分:27)
每次只生成相同的结果,因为它位于游乐场,时间被冻结,页面被缓存。
这不是一个好主意,因为可以根据请求的时间猜出重置密码。
为什么它必须是md5?这是一个随机令牌生成器:
http://play.golang.org/p/3weHBU6YZr
func randToken() string {
b := make([]byte, 8)
rand.Read(b)
return fmt.Sprintf("%x", b)
}
答案 1 :(得分:0)
go get "code.google.com/p/go-uuid/uuid"
和func uuid.New()就是你想要的。