登录
首页 >  Golang >  Go问答

rand.Read 的冲突问题是什么

来源:stackoverflow

时间:2024-02-19 10:51:20 147浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《rand.Read 的冲突问题是什么》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我在浏览mattermost代码时遇到两个问题

  1. 为什么data []byte的长度是1+(length*5/8)?为什么 length 乘以 5?
  2. rand.read 的冲突是什么?在 linux 和 freebsd 上,rand.read 使用 getrandom(2)(如果可用)
package main

import (
    "fmt"
    "crypto/rand"
    "encoding/base32"
)

func main() {
    fmt.Println("Hello, playground")
    fmt.Println(NewRandomString(64))
}

var encoding = base32.NewEncoding("ybndrfg8ejkmcpqxot1uwisza345h769")

// NewRandomString returns a random string of the given length.
// The resulting entropy will be (5 * length) bits.
func NewRandomString(length int) string {
    data := make([]byte, 1+(length*5/8))
    rand.Read(data)
    return encoding.EncodeToString(data)[:length]
}

你可以尝试:https://play.golang.org/p/wcs667bp407

参考https://github.com/mattermost/mattermost-server/blob/fc60a1e8dd9d1a225687aead0684035ee63d7562/model/utils.go#l184


解决方案


因为它返回一个base32字符串,而base32字符串的每个字符保存5位信息。所以例如如果要生成40个字符的base32字符串,则需要200位随机性,这是通过读取25(即200 / 8)个随机字节来实现的。

今天关于《rand.Read 的冲突问题是什么》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>