Go - Example about crypto/rand

2019-04-02 16:17发布

Could put a little example about the use of crypto/rand [1]?

The function Read has as parameter an array of bytes. Why? If it access to /dev/urandom to get the random data.

func Read(b []byte) (n int, err os.Error)

[1] http://golang.org/pkg/crypto/rand/

1条回答
手持菜刀,她持情操
2楼-- · 2019-04-02 17:13
func Read(b []byte) (n int, err os.Error)

Read is a helper function that calls Reader.Read. Reader is defined as: var Reader io.Reader.

crypto/rand/

io.Reader is the interface that wraps the basic Read method.

Read reads up to len(p) bytes into p. It returns the number of bytes read (0 <= n <= len(p)) and any error encountered. Even if Read returns n < len(p), it may use all of p as scratch space during the call. If some data is available but not len(p) bytes, Read conventionally returns what is available rather than block waiting for more.

At the end of the input stream, Read returns 0, os.EOF. Read may return a non-zero number of bytes with a non-nil err. In particular, a Read that exhausts the input may return n > 0, os.EOF.

type Reader interface {
    Read(p []byte) (n int, err os.Error)
}

io/#Reader

For example, to read the first 16 random bytes,

package main

import (
    "fmt"
    "crypto/rand"
)

func main() {
    b := make([]byte, 16)
    n, err := rand.Read(b)
    fmt.Println(n, err, b)
}

Using a package init() function, crypto/rand defaults to using /dev/urandom.

// Easy implementation: read from /dev/urandom.
// This is sufficient on Linux, OS X, and FreeBSD.
func init() { Reader = &devReader{name: "/dev/urandom"} }

crypto/rand/rand.go

查看更多
登录 后发表回答