2013-04-04 10 views
6

Ich versuche, eine zufällige Ganzzahl innerhalb eines Bereichs durch Lesen von crypto.randomBytes() zu erhalten.Konvertieren von zufälligen Bytes in einen ganzzahligen Bereich - wie?

Jetzt ist mein Problem, dass ich nicht weiß, wie Integer aus diesem Byte-Stream gelesen werden. Ich stelle mir vor, eine Reichweite zu erzeugen, ist einfach eine Frage des "Wegwerfens" der Ints, die nicht in Reichweite sind.

Irgendwelche Ideen?

+0

Diese Frage helfen könnten: http://stackoverflow.com/questions/15753019/floating-point-number-from-crypto-randombytes- in-javascript Wenn Sie das schaffen, können Sie Math.floor (randomFloat() * maxInteger) verwenden, um eine Ganzzahl zwischen 0 und (maxInteger - 1) zu erhalten. –

Antwort

9

Sie können eine 32-Bit-Ganzzahl von crypto.randomBytes mit dem folgenden Code abrufen. Wenn Sie mehr als einen benötigen, können Sie weitere Bytes von crypto.randomBytes anfordern und dann substr verwenden, um jede einzelne Zahl einzeln auszuwählen und zu konvertieren.

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

gesagt haben, dass Sie nur Math.floor(Math.random() * maxInteger) wollen vielleicht verwenden

+0

Vielen Dank, brilliant und funktioniert schön –

+0

Genau das, was ich brauchte, danke! Hier ist die einzeilige Version: parseInt (crypto.randomBytes (4) .toString ('hex'), 16); –

+0

Ein guter Grund, crypto.randomBytes() nur von Math.random zu verwenden, ist dieser https://cwe.mitre.org/data/definitions/330.html –

Verwandte Themen