如何使用md5生成随机令牌

时间:2014-08-21 16:47:30

标签: go

我正在尝试生成一个随机令牌,我可以在实现重置密码功能时使用它。这个(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))
}

http://play.golang.org/p/mmAzXLIZML

2 个答案:

答案 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)

uuid是另一种选择。见

go get  "code.google.com/p/go-uuid/uuid"

和func uuid.New()就是你想要的。