假设我想使用以下方法生成 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
相关分类