use*_*368 1 random cryptography go
可以举一个关于使用crypto/rand[1]的小例子吗?
该函数Read有一个字节数组作为参数。为什么?如果它访问/dev/urandom以获取随机数据。
func Read(b []byte) (n int, err os.Error)
Run Code Online (Sandbox Code Playgroud)
func Read(b []byte) (n int, err os.Error)
Run Code Online (Sandbox Code Playgroud)
Read是一个辅助函数,调用Reader.Read. Reader定义为:var Reader io.Reader。
io.Reader是包装基本Read方法的接口。
Read最多读取len(p)字节到p. 它返回读取的字节数 ( 0 <= n <= len(p)) 和遇到的任何错误。即使Read返回n < len(p),它也可能p在调用期间使用所有作为暂存空间。如果某些数据可用但不是len(p)字节,则Read通常返回可用的数据,而不是阻塞等待更多数据。
在输入流的末尾,Read返回0, os.EOF。Read可能会返回非零字节数且nil无错误。特别是Read,耗尽输入的 a 可能返回 n > 0, os.EOF。
type Reader interface {
Read(p []byte) (n int, err os.Error)
}
Run Code Online (Sandbox Code Playgroud)
例如,要读取前 16 个随机字节,
package main
import (
"fmt"
"crypto/rand"
)
func main() {
b := make([]byte, 16)
n, err := rand.Read(b)
fmt.Println(n, err, b)
}
Run Code Online (Sandbox Code Playgroud)
使用包init()函数,crypto/rand默认使用/dev/urandom.
// Easy implementation: read from /dev/urandom.
// This is sufficient on Linux, OS X, and FreeBSD.
func init() { Reader = &devReader{name: "/dev/urandom"} }
Run Code Online (Sandbox Code Playgroud)