Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menjana Integer Rawak Selamat dan Token Menggunakan 'crypto/rand'?

Bagaimana untuk Menjana Integer Rawak Selamat dan Token Menggunakan 'crypto/rand'?

DDD
DDDasal
2024-11-23 09:09:17935semak imbas

How to Generate Secure Random Integers and Tokens Using

Penjanaan Int Rawak menggunakan "crypto/rand.Int"

Dalam pakej "crypto/rand" terdapat keperluan untuk menjana rawak selamat integer. Contoh cara untuk mencapai ini antara julat 0 hingga 27 adalah di bawah:

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

Fungsi ini menggunakan "rand.Reader" dan jenis "big.Int" daripada perpustakaan "math/big" untuk mencapai rawak kriptografi melebihi julat int.

Token Selamat Penjanaan

Walau bagaimanapun, dalam konteks penjanaan token selamat, pendekatan alternatif dan lebih sesuai disyorkan:

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

Dalam senario ini, bait rawak dijana, kemudian dikodkan menggunakan "base32" untuk mencipta token. Pendekatan ini dianggap mencukupi untuk penjanaan token selamat.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Integer Rawak Selamat dan Token Menggunakan 'crypto/rand'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn