ホームページ > バックエンド開発 > Golang > 「crypto/rand」を使用して安全なランダム整数とトークンを生成するにはどうすればよいですか?

「crypto/rand」を使用して安全なランダム整数とトークンを生成するにはどうすればよいですか?

DDD
リリース: 2024-11-23 09:09:17
オリジナル
958 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート