2013-04-04 9 views
6

Próbuję uzyskać losową liczbę całkowitą w zakresie, czytając z crypto.randomBytes().Konwersja losowych bajtów na zakres całkowity - jak?

Moim problemem jest to, że nie wiem, jak odczytać liczby całkowite z tego strumienia bajtów. Wyobrażam sobie, że generowanie zasięgu jest po prostu kwestią "wyrzucenia" intów nie znajdujących się w zasięgu.

Wszelkie pomysły?

+0

To pytanie może pomóc: http://stackoverflow.com/questions/15753019/floating-point-number-from-crypto-randombytes- in-javascript Jeśli możesz uzyskać tę pracę, możesz zrobić Math.floor (randomFloat() * maxInteger), aby uzyskać liczbę całkowitą od 0 do (maxInteger - 1). –

Odpowiedz

9

Możesz otrzymać jedną 32-bitową liczbę całkowitą z crypto.randomBytes z poniższym kodem. Jeśli potrzebujesz więcej niż jednego, możesz poprosić o więcej bajtów od crypto.randomBytes, a następnie użyć substr do indywidualnego wyboru i konwersji każdej liczby całkowitej.

crypto.randomBytes(4, function(ex, buf) { 
    var hex = buf.toString('hex'); 
    var myInt32 = parseInt(hex, 16); 
}); 

Mimo, że możesz po prostu użyć Math.floor(Math.random() * maxInteger)

+0

Dziękuję, genialny i pięknie działa –

+0

Właśnie tego potrzebowałem, dzięki! Oto wersja jednolinijkowa: parseInt (crypto.randomBytes (4) .toString ('hex'), 16); –

+0

Dobry powód, aby korzystać z crypto.randomBytes() insteaad tylko Math.random jest od tego https://cwe.mitre.org/data/definitions/330.html –

Powiązane problemy