Say Chciałbym wygenerować bezpieczne losową int między 0 a 27 przy użyciu:Jak wygenerować losowe int za pomocą pakietu "crypto/rand"?
func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)
w pakiecie "crypto/rand"
.
Jak to zrobić?
Naprawdę nie rozumiem, jak to działa, dlaczego nie zwraca jednego z wbudowanych int Go zamiast wskaźnika do jakiegoś dużego. Typu wewnętrznego?
EDIT:
byłoby to uznane za wystarczająco bezpieczne tokeny?
func getToken(length int) string {
token := ""
codeAlphabet := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
codeAlphabet += "abcdefghijklmnopqrstuvwxyz"
codeAlphabet += ""
for i := 0; i < length; i++ {
token += string(codeAlphabet[cryptoRandSecure(int64(len(codeAlphabet)))])
}
return token
}
func cryptoRandSecure(max int64) int64 {
nBig, err := rand.Int(rand.Reader, big.NewInt(max))
if err != nil {
log.Println(err)
}
return nBig.Int64()
}
func main() {
fmt.Println(getToken(32))
}
Wyjście to będzie coś takiego:
qZDbuPwNQGrgVmZCU9A7FUWbp8eIfn0Z
EwZVoQ5D5SEfdhiRsDfH6dU6tAovILCZ
cOqzODVP0GwbiNBwtmqLA78rFgV9d3VT
Czy naprawdę potrzebujesz "bezpiecznej kryptograficznie liczby pseudolosowej"? (z doc https://godoc.org/crypto/rand) Jeśli nie, możesz użyć https://godoc.org/math/rand – HectorJ
Potrzebuję go do wygenerowania bezpiecznych tokenów. Jak ten, który pokazałem powyżej. Chciałbym, aby zawierała wszystkie znaki alfabetu, w tym cyfry. – Aiden
Właśnie zobaczyłem twoją edycję. Alternatywnym sposobem może być wygenerowanie naprawdę dużego losowego int (np. Między 0 a maksymalnym int64) i zakodowanie go w systemie szesnastkowym lub base32. Dodam to do mojej odpowiedzi – HectorJ