使用“crypto/rand.Int”生成随机整数
在“crypto/rand”包中需要生成安全随机数整数。下面是如何在 0 到 27 范围内实现此目的的示例:
package main import ( "crypto/rand" "fmt" "math/big" ) func main() { nBig, err := rand.Int(rand.Reader, big.NewInt(27)) if err != nil { panic(err) } n := nBig.Int64() fmt.Printf("Random int in [0,27): %d\n", n) }
此函数利用“math/big”库中的“rand.Reader”和“big.Int”类型实现超出 int 范围的加密随机性。
安全令牌生成
但是,在生成安全令牌的情况下,建议使用替代且更合适的方法:
package main import ( "crypto/rand" "encoding/base32" "fmt" ) func main() { token := getToken(10) fmt.Printf("Secure token: %s\n", token) } func getToken(length int) string { randomBytes := make([]byte, 32) _, err := rand.Read(randomBytes) if err != nil { panic(err) } return base32.StdEncoding.EncodeToString(randomBytes)[:length] }
在这种情况下,生成随机字节,然后使用“base32”来创建令牌。这种方法被认为足以安全地生成令牌。
以上是如何使用'crypto/rand”生成安全随机整数和令牌?的详细内容。更多信息请关注PHP中文网其他相关文章!