猿问

如何使用“crypto/rand”包生成随机整数?

假设我想使用以下方法生成 0 到 27 之间的安全随机整数:


func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)

在"crypto/rand"包中。


我该怎么做?


我真的不明白这是如何工作的,为什么它不返回一个内置的 Go ints 而不是指向某个 big.Int 类型的指针?


编辑:


这对于令牌来说是否足够安全?


func getToken(length int) string {

    token := ""

    codeAlphabet := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    codeAlphabet += "abcdefghijklmnopqrstuvwxyz"

    codeAlphabet += "0123456789"


    for i := 0; i < length; i++ {

        token += string(codeAlphabet[cryptoRandSecure(int64(len(codeAlphabet)))])

    }

    return token

}


func cryptoRandSecure(max int64) int64 {

    nBig, err := rand.Int(rand.Reader, big.NewInt(max))

    if err != nil {

        log.Println(err)

    }

    return nBig.Int64()

}


func main() {

    fmt.Println(getToken(32))

}

这将输出如下内容:


qZDbuPwNQGrgVmZCU9A7FUWbp8eIfn0Z


EwZVoQ5D5SEfdhiRsDfH6dU6tAovILCZ


cOqzODVP0GwbiNBwtmqLA78rFgV9d3VT


斯蒂芬大帝
浏览 356回答 3
3回答
随时随地看视频慕课网APP

相关分类

Go
我要回答