2013-04-04 21 views
6

Bir aralık içinde rastgele bir tamsayı elde etmeye çalışıyorum crypto.randomBytes().Rasgele baytları bir tamsayı aralığına dönüştürme - nasıl?

Şimdi, benim sorunum, bu bayt akışından tamsayıların nasıl okunacağını bilmem. Bir dizi oluşturmanın, sadece menzil olmayan inters 'atmak' meselesi olduğunu hayal ediyorum.

Herhangi bir fikrin var mı?

+0

kullanmak isteyebilirsiniz, söyledikten: http://stackoverflow.com/questions/15753019/floating-point-number-from-crypto-randombytes- in-javascript Eğer çalışabilirseniz, 0 ile (maxInteger - 1) arasında bir tam sayı elde etmek için Math.floor (randomFloat() * maxInteger) yapabilirsiniz. –

cevap

9

Aşağıdaki kodla crypto.randomBytes'dan bir 32 bit tam sayı alabilirsiniz. Birden fazlasına ihtiyacınız varsa, crypto.randomBytes'dan daha fazla bayt isteyebilirsiniz ve daha sonra her bir tamsayıyı tek tek seçmek ve dönüştürmek için substr'u kullanın.

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

sadece bu soru yardımcı olabilecek Math.floor(Math.random() * maxInteger)

+0

Teşekkür ederim, harika ve güzel çalışıyor –

+0

Sadece neye ihtiyacım var, teşekkürler! İşte tek satırlık versiyon: parseInt (crypto.randomBytes (4) .toString ('hex'), 16); –

+0

Sadece Math.random crypto.randomBytes() insteaad kullanmak için iyi bir nedeni bu https://cwe.mitre.org/data/definitions/330.html –

İlgili konular