有沒有Golang的功能,它幾乎與PHP的openssl_random_pseudo_bytes()
功能相同?PHP的openssl_random_pseudo_bytes Golang的替代方案?
我需要這個在Golang中生成僞隨機字節串。
有沒有Golang的功能,它幾乎與PHP的openssl_random_pseudo_bytes()
功能相同?PHP的openssl_random_pseudo_bytes Golang的替代方案?
我需要這個在Golang中生成僞隨機字節串。
字節發生器的快速,重量輕僞隨機串
首先確定我們要使用的字節數組我們發生器(在這種情況下,它應該是字母) 然後決定有多少位代表一個字母(它將允許我們逐個字母)和包含一個字母的位數的字母「模板」 另外,我還存儲了最大索引我可以從我的字節數組
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 const中得到一個隨機字母。 如果字符串長度,我想在年底會獲得更多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)
}
我在這個網站是新的(至少作爲回答=))。我會盡力做得更好。 –
看包「加密/蘭特」,replace rand() with openssl_random_pseudo_bytes()和https://github.com/dgrijalva/jwt-go/blob/master/hmac_example_test.go
func init() {
// Load sample key data
if keyData, e := ioutil.ReadFile("test/hmacTestKey"); e == nil {
hmacSampleSecret = keyData
} else {
panic(e)
}
}
https://godoc.org/github.com/dgrijalva/jwt-go#example-New--Hmac我整天都有這個問題。我正在嘗試使用鏈接中的確切代碼,但是我爲hmacSampleSecret使用了什麼?這讓我很困惑。 – Acidic
https://golang.org/pkg/crypto/rand/ –