使用「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中文網其他相關文章!