golang中crypto/rand包


rand 包实现了一个密码安全的伪随机数生成器
func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)
func Prime(rand io.Reader, bits int) (p *big.Int, err error)
func Read(b []byte) (n int, err error)

变量
Reader 是一个密码强大的伪随机生成器的全球共享实例
Linux上 Reader 使用 getrandom(2)(如果可用) 否则使用 /dev/urandom
OpenBSD 上 Reader使用 getentropy(2)
类 Unix 系统上 Reader 从 /dev/urandom 读取
Windows 系统上 Reader 使用 CryptGenRandom API

var Reader io.Reader
func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)
Int在[0, max) 中返回一个统一的随机值 如果 max <= 0 它会发生混乱
func Prime(rand io.Reader, bits int) (p *big.Int, err error)
Prime 返回给定大小的数字p 使得 p 以高概率为素数 Prime 会返回由 rand.Read返回的任何错误或位 <2 的错误

func Read(b []byte) (n int, err error)
Read 是一个使用 io.ReadFull 调用 Reader.Read 的辅助函数 返回时 n == len(b) 当且仅当 err == nil
从 rand.Reader 中读取10个密码安全的伪随机数 并写入字节片
package main
import (
    "bytes"
    "crypto/rand"
    "fmt"
)
func main() {
    c := 10
    b := make([]byte, c)
    _, err := rand.Read(b)
    if err != nil {
        fmt.Println("error:", err)
        return
    }
    // 切片现在 包含随机字节而不是仅包含零
    fmt.Println(bytes.Equal(b, make([]byte, c)))//output false
  fmt.Printf("%+v", b) //output [98 122 204 48 120 3 182 6 136 31]
}


Go的crypto/rand包和crypto相关