Maison >développement back-end >Golang >Comment générer des entiers et des jetons aléatoires sécurisés à l'aide de « crypto/rand » ?

Comment générer des entiers et des jetons aléatoires sécurisés à l'aide de « crypto/rand » ?

DDD
DDDoriginal
2024-11-23 09:09:17996parcourir

How to Generate Secure Random Integers and Tokens Using

Génération aléatoire d'int à l'aide de "crypto/rand.Int"

Dans le package "crypto/rand" réside la nécessité de générer des informations aléatoires sécurisées entiers. Un exemple de la façon d'y parvenir entre 0 et 27 est ci-dessous :

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)
}

Cette fonction utilise le type "rand.Reader" et "big.Int" de la bibliothèque "math/big". pour obtenir un caractère aléatoire cryptographique au-delà de la plage int.

Génération de jetons sécurisés

Cependant, dans Dans le contexte de la génération de jetons sécurisés, une approche alternative et plus appropriée est recommandée :

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]
}

Dans ce scénario, des octets aléatoires sont générés, puis encodés en "base32" pour créer un jeton. Cette approche est jugée suffisante pour une génération sécurisée de jetons.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn