首頁 > 後端開發 > Golang > 如何使用'crypto/rand”產生安全隨機整數和令牌?

如何使用'crypto/rand”產生安全隨機整數和令牌?

DDD
發布: 2024-11-23 09:09:17
原創
981 人瀏覽過

How to Generate Secure Random Integers and Tokens Using

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板