2013-04-04 6 views
6

मैं crypto.randomBytes() से पढ़कर एक सीमा के भीतर एक यादृच्छिक पूर्णांक प्राप्त करने का प्रयास कर रहा हूं।यादृच्छिक बाइट्स को एक पूर्णांक सीमा में कनवर्ट करना - कैसे?

अब, मेरी समस्या यह है कि मुझे नहीं पता कि उस बाइट स्ट्रीम से पूर्णांक कैसे पढ़ा जाए। मुझे लगता है कि एक रेंज उत्पन्न करना बस इन चींटियों को 'फेंकने' की बात है।

कोई विचार?

+0

यह सवाल मदद कर सकता है उपयोग करने के लिए चाहते हो सकता है: http://stackoverflow.com/questions/15753019/floating-point-number-from-crypto-randombytes- इन-जावास्क्रिप्ट यदि आप काम कर सकते हैं तो आप 0 और (maxInteger - 1) के बीच एक पूर्णांक प्राप्त करने के लिए Math.floor (randomFloat() * maxInteger) कर सकते हैं। –

उत्तर

9

आप नीचे दिए गए कोड के साथ crypto.randomBytes से एक 32 बिट पूर्णांक प्राप्त कर सकते हैं। यदि आपको एक से अधिक की आवश्यकता है तो आप crypto.randomBytes से अधिक बाइट्स के लिए पूछ सकते हैं और फिर प्रत्येक पूर्णांक को अलग-अलग चुनने और परिवर्तित करने के लिए substr का उपयोग करें।

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

कहा करने के बाद, आप बस Math.floor(Math.random() * maxInteger)

+0

धन्यवाद, शानदार और सुंदर काम करता है –

+0

बस मुझे जो चाहिए, धन्यवाद! यहां एक-पंक्ति संस्करण है: parseInt (crypto.randomBytes (4) .toString ('hex'), 16); –

+0

सिर्फ Math.random के crypto.randomBytes() insteaad का उपयोग करने का एक अच्छा कारण इस https://cwe.mitre.org/data/definitions/330.html के कारण है –

संबंधित मुद्दे