Go语言生成随机数

golang 内置能实现伪随机(math/rand)和真随机(crypto/rand)的库。

真随机和伪随机

根据密码学原理,“随机数”随机性检验三个标准

  • 统计学伪随机性:随机的比特流中,0和1的数量大致相等
  • 密码学安全伪随机性:使用部分随机样本和随机数生成算法,不可以演算出随机样本的剩余部分。
  • 真随机性:随机样本不可重现

只满足第一个标准的随机数称为伪随机数,同时满足前两个条件的随机数称为密码学安全的伪随机数,同时满足三个条件的随机数称为真随机数

golang的伪随机

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	//初始化随机种子
	rand.Seed(time.Now().Unix())
	//生成100以内的伪随机数
	result := rand.Intn(100)
	fmt.Println(result)
}

golang的真随机

package main

import (
	"crypto/rand"
	"fmt"
	"math/big"
)

func main() {
    //生成100以内的伪随机数
	result, _ := rand.Int(rand.Reader, big.NewInt(100))
	fmt.Println(result)
}