वर्तमान कार्यान्वयन SecureRandom
थ्रेड सुरक्षित है, विशेष रूप से दो उत्परिवर्तन विधियों nextBytes(bytes[])
और setSeed(byte[])
सिंक्रनाइज़ हैं।
खैर, जहाँ तक मैं बताने में सक्षम रहा हूँ, सभी उत्परिवर्तन विधियों को अंततः उन दो विधियों के माध्यम से रूट किया जाता है और यह सुनिश्चित करने के लिए SecureRandom
कुछ तरीकों को ओवरराइड करता Random
है। जो काम करता है लेकिन अगर भविष्य में कार्यान्वयन बदल जाता है तो वह भंगुर हो सकता है।
सबसे अच्छा समाधान SecureRandom
पहले उदाहरण पर मैन्युअल रूप से सिंक्रनाइज़ करना है । इसका मतलब है कि प्रत्येक कॉल स्टैक एक ही वस्तु पर दो ताले प्राप्त करेगा, लेकिन यह आमतौर पर आधुनिक जेवीएम पर बहुत सस्ता है। यही है, अपने आप को स्पष्ट रूप से सिंक्रनाइज़ करने में बहुत नुकसान नहीं है। उदाहरण के लिए:
SecureRandom rnd = ...;
byte[] b = new byte[NRANDOM_BYTES];
synchronized (rnd) {
rnd.nextBytes(b);
}