crypt/rand는math/rand로 사용
12337 단어 Goprogrammingrandomtech
사실 crypto/rand를 math/rand로 만든 소스도 그리 어렵지 않다.math/rand의 소스는
math/rand/rand.go
// A Source represents a source of uniformly-distributed
// pseudo-random int64 values in the range [0, 1<<63).
type Source interface {
Int63() int64
Seed(seed int64)
}
// A Source64 is a Source that can also generate
// uniformly-distributed pseudo-random uint64 values in
// the range [0, 1<<64) directly.
// If a Rand r's underlying Source s implements Source64,
// then r.Uint64 returns the result of one call to s.Uint64
// instead of making two calls to s.Int63.
type Source64 interface {
Source
Uint64() uint64
}
따라서 그에 어울리는 호각을 만들면 된다.예를 들면 이런 느낌.sample.go
type Source struct{}
// Seed method is dummy function for rand.Source interface.
func (s Source) Seed(seed int64) {}
// Uint64 method generates a random number in the range [0, 1<<64).
func (s Source) Uint64() uint64 {
b := [8]byte{}
ct, _ := rand.Read(b[:])
return binary.BigEndian.Uint64(b[:ct])
}
// Int63 method generates a random number in the range [0, 1<<63).
func (s Source) Int63() int64 {
return (int64)(s.Uint64() >> 1)
}
이렇게 하면sample.go
fmt.Println(rand.New(Source{}).Float64()) // 0.9581627789424901
이런 느낌.Rand형이 제공하는 방법rand을 이용할 수 있다.코드 전체가 이런 느낌입니다.sample.go
//go:build run
// +build run
package main
import (
"crypto/rand"
"encoding/binary"
"fmt"
mrand "math/rand"
)
type Source struct{}
// Seed method is dummy function for rand.Source interface.
func (s Source) Seed(seed int64) {}
// Uint64 method generates a random number in the range [0, 1<<64).
func (s Source) Uint64() uint64 {
b := [8]byte{}
ct, _ := rand.Read(b[:])
return binary.BigEndian.Uint64(b[:ct])
}
// Int63 method generates a random number in the range [0, 1<<63).
func (s Source) Int63() int64 {
return (int64)(s.Uint64() >> 1)
}
func main() {
fmt.Println(mrand.New(Source{}).Float64())
}
그래서 포장하기로 했다.그럼에도 불구하고 이런 기능만을 위해 창고를 만드는 것은 아까워 졸작의 위조 랜덤수 포장[1]의 사은품 기능을 편입해 봤다.이런 느낌으로 쓸 수 있어.좋아, 응, 좋아.그럼, 계속 일하세요.
github.com/spiegel-im-spiegel/mt
각주
.Rand형이 제공하는 방법은 안전하지 않다는 것을 주의하십시오.rand
Reference
이 문제에 관하여(crypt/rand는math/rand로 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/spiegel/articles/20211016-crypt-rand-as-a-math-rand텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)