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で擬似ランダムな文字列を生成するには、これが必要です。まずパッケージ「暗号/ランド」で
クイック・軽量擬似ランダム文字列は、我々のために使用するバイトの配列を定義します(この場合、それは文字でなければなりません) 次に、1文字を表すビット数を決めます(文字を1つずつ取ることができます)。1文字のビット数を含む文字「テンプレート」 また、私はバイト配列から取ることができます
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からランダムな文字を1つ取得します。 私はより多くの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)
}
私はこのサイトで(少なくともanswerer =)新しいです。私はより良くしようとします。 –
見て、バイト・ジェネレータ
の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/ –