gpt4 book ai didi

PHP 的 openssl_random_pseudo_bytes Golang 的替代品?

转载 作者:IT王子 更新时间:2023-10-29 02:22:33 26 4
gpt4 key购买 nike

Golang 是否有与 PHP 相同或几乎相同的函数 openssl_random_pseudo_bytes()功能?

我需要它在 Golang 中生成伪随机字节串。

最佳答案

快速轻量级的伪随机字节串生成器

首先定义我们想要用于我们的生成器的字节数组(在这种情况下它应该是字母)然后决定有多少位代表一个字母(这将允许我们一个接一个地取字母)和包含一个字母的位数的字母"template"我还存储了可以从字节数组中获取的最大索引

const (
letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
letterIdxBits = 6 // 6 bits to represent a letter index
letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits
letterIdxMax = 63 / letterIdxBits // # of letter indices fitting in 63 bits
)

StringRandomizer 函数获取一个参数(我想作为结果获取的字符串的长度)

基本上,这个函数只是一个简单的循环,它创建一个新的字节数组,该数组具有定义的长度和伪随机元素。直到我没有填写结果数组的所有必需元素(没有放入'n'个元素),我从我的 letterBytes 常量中得到一个随机字母。如果我想在最后得到的字符串长度超过 letterIdxMax,我只需创建新的 63 字节随机序列 (src.Int63()) 并继续循环

func StringRandomizer(n int) string {
src := rand.NewSource(time.Now().UnixNano())
b := make([]byte, n)
// A src.Int63() generates 63 random bits, enough for letterIdxMax characters!
for i, cache, remain := n-1, src.Int63(), letterIdxMax; i >= 0; remain-- {
if remain == 0 {
cache, remain = src.Int63(), letterIdxMax
}
if idx := int(cache & letterIdxMask); idx < len(letterBytes) {
b[i] = letterBytes[idx]
i--
}
cache >>= letterIdxBits

}
return string(b)
}

关于PHP 的 openssl_random_pseudo_bytes Golang 的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41382570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com