मैं जावा में 20 यादृच्छिक बाइट्स की एक सरणी कैसे बना सकता हूं?
मैं जावा में 20 यादृच्छिक बाइट्स की एक सरणी कैसे बना सकता हूं?
जवाबों:
Random.nextBytes
विधि का प्रयास करें :
byte[] b = new byte[20];
new Random().nextBytes(b);
यदि आप किसी तृतीय पक्ष एपीआई का उपयोग किए बिना एक क्रिप्टोग्राफिक रूप से मजबूत यादृच्छिक संख्या जनरेटर (थ्रेड सेफ भी) चाहते हैं, तो आप उपयोग कर सकते हैं SecureRandom
।
जावा 6 और 7:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
जावा 8 (और भी सुरक्षित):
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
यदि आप पहले से ही Apache Commons Lang का उपयोग कर रहे हैं, तो RandomUtils
यह इसे वन-लाइनर बनाता है:
byte[] randomBytes = RandomUtils.nextBytes(20);
जावा 7 ने थ्रेडलोकलैंडर को पेश किया जो वर्तमान थ्रेड के लिए अलग है ।
यह मैरिकिक्स के समाधान का एक और प्रतिपादन है ।
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
? बेहतर:ThreadLocalRandom.current().nextBytes(bytes);
एक बीज के साथ एक यादृच्छिक वस्तु बनाएं और सरणी को यादृच्छिक रूप से प्राप्त करें:
public static final int ARRAY_LENGTH = 20;
byte[] byteArray = new byte[ARRAY_LENGTH];
new Random(System.currentTimeMillis()).nextBytes(byteArray);
// get fisrt element
System.out.println("Random byte: " + byteArray[0]);
यादृच्छिक बाइट सरणी बनाने के लिए अधिक सुरक्षित तरीका चाहने वालों के लिए, हाँ सबसे सुरक्षित तरीका है:
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
यदि आपके ओएस पर निर्भर करते हुए मशीन पर पर्याप्त यादृच्छिकता उपलब्ध नहीं है, तो आपके धागे ब्लॉक हो सकते हैं। निम्नलिखित समाधान अवरुद्ध नहीं होगा:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
ऐसा इसलिए है क्योंकि /dev/random
अधिक यादृच्छिकता (माउस / कीबोर्ड और अन्य स्रोतों से उत्पन्न) की प्रतीक्षा करते हुए पहला उदाहरण उपयोग करता है और ब्लॉक करेगा। दूसरा उदाहरण उपयोग करता है /dev/urandom
जो ब्लॉक नहीं करेगा।