Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menjana Integer Rawak Selamat dan Token dalam Go?

Bagaimana untuk Menjana Integer Rawak Selamat dan Token dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-11-12 21:43:02241semak imbas

How to Generate Secure Random Integers and Tokens in Go?

Generasi Int Rawak Selamat dengan "crypto/rand"

Dalam Go, menjana integer rawak selamat ialah tugas kritikal untuk pelbagai aplikasi kriptografi. Pakej "crypto/rand" menyediakan mekanisme untuk mencapainya dengan selamat.

Untuk menjana integer rawak antara 0 dan 27 menggunakan pakej "crypto/rand", anda boleh menggunakan fungsi berikut:

func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)

Fungsi ini memerlukan dua hujah:

  • rand: An pelaksanaan io.Reader, seperti crypto/rand.Reader, untuk menjana data rawak.
  • maks: Int besar yang mewakili sempadan atas untuk integer rawak.

Untuk menjana integer rawak antara 0 dan 27, gunakan yang berikut kod:

nBig, err := rand.Int(rand.Reader, big.NewInt(27))
if err != nil {
    panic(err)
}
n := nBig.Int64()

Penjanaan Token Kriptografi

Untuk menjana token selamat, pendekatan yang lebih baik melibatkan penggunaan pakej "pengekodan/base32" untuk menjana kepingan bait rawak dan tukarkannya kepada rentetan menggunakan pengekodan base32. Berikut ialah contoh:

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

Pendekatan ini dianggap selamat untuk menjana token kerana ia menggunakan penjana nombor rawak yang selamat secara kriptografi dan menukarkan hasilnya kepada rentetan menggunakan pengekodan base32, memastikan token output tidak dapat diramalkan dan sukar. untuk meneka.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Integer Rawak Selamat dan Token dalam Go?. 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