Go - 关于crypto / rand的示例

时间:2010-04-18 14:45:41

标签: random cryptography go

可以举一点使用crypto/rand [1]的例子吗?

函数Read具有作为参数的字节数组。为什么?如果它访问 / dev / urandom 以获取随机数据。

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

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

1 个答案:

答案 0 :(得分:4)

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

Read是一个调用Reader.Read的辅助函数。 Reader定义为:var Reader io.Reader

crypto/rand/

io.Reader是包装基本Read方法的接口。

Readlen(p)字节读取到p。它返回读取的字节数(0 <= n <= len(p))和遇到的任何错误。即使Read返回n < len(p),它也可能在调用期间使用所有p作为临时空间。如果某些数据可用但不是len(p)个字节,Read通常会返回可用的内容,而不是阻止等待更多内容。

在输入流的末尾,Read返回0, os.EOFRead可能会返回非零的字节数,而非nil错误。特别地,耗尽输入的Read可以返回n> 0, os.EOF

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

io/#Reader

例如,要读取前16个随机字节,

package main

import (
    "fmt"
    "crypto/rand"
)

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

使用套餐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"} }

crypto/rand/rand.go