Go で安全なランダム整数とトークンを生成するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-12 21:43:02
オリジナル
155 人が閲覧しました

How to Generate Secure Random Integers and Tokens in Go?

「crypto/rand」による安全なランダム整数の生成

Go では、安全なランダム整数を生成することは、さまざまな暗号化アプリケーションにとって重要なタスクです。 「crypto/rand」パッケージは、これを安全に実現するメカニズムを提供します。

「crypto/rand」パッケージを使用して 0 から 27 までのランダムな整数を生成するには、次の関数を利用できます:

func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)
ログイン後にコピー

この関数には 2 つの引数が必要です:

  • rand: ランダム データを生成するための、crypto/rand.Reader などの io.Reader の実装。
  • max: ランダムな整数の上限を表す big.Int。

0 から 27 までのランダムな整数を生成するには、次のコードを使用します。

nBig, err := rand.Int(rand.Reader, big.NewInt(27))
if err != nil {
    panic(err)
}
n := nBig.Int64()
ログイン後にコピー

暗号トークンの生成

安全なトークンを生成するには、「encoding/base32」パッケージを使用してランダムなバイト スライスを生成し、それをBase32エンコーディングを使用した文字列。以下に例を示します。

package main

import (
    "crypto/rand"
    "encoding/base32"
    "fmt"
)

func main() {
    randomBytes := make([]byte, 32)
    _, err := rand.Read(randomBytes)
    if err != nil {
        panic(err)
    }
    token := base32.StdEncoding.EncodeToString(randomBytes)[:27] // Adjust length as needed
    fmt.Println("Here is a random token: ", token)
}
ログイン後にコピー

このアプローチは、暗号的に安全な乱数ジェネレーターを利用し、base32 エンコードを使用して結果を文字列に変換するため、トークンを生成するのに安全であると考えられており、出力トークンが予測不可能で困難であることが保証されます。

以上がGo で安全なランダム整数とトークンを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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