การใช้งานปัจจุบันของSecureRandom
เธรดปลอดภัยโดยเฉพาะสองวิธีการกลายพันธุ์nextBytes(bytes[])
และsetSeed(byte[])
มีการซิงโครไนซ์
เท่าที่ฉันสามารถบอกได้ในที่สุดวิธีการกลายพันธุ์ทั้งหมดจะถูกกำหนดเส้นทางผ่านสองวิธีนี้และSecureRandom
แทนที่วิธีการบางอย่างRandom
เพื่อให้แน่ใจว่า ซึ่งใช้งานได้ แต่อาจเปราะบางหากมีการเปลี่ยนแปลงการนำไปใช้ในอนาคต
ทางออกที่ดีที่สุดคือการซิงโครไนSecureRandom
ซ์อินสแตนซ์ด้วยตนเองก่อน ซึ่งหมายความว่าสแต็กการโทรแต่ละชุดจะได้รับการล็อกสองรายการในวัตถุเดียวกัน แต่โดยปกติจะมีราคาถูกมากสำหรับ JVM สมัยใหม่ นั่นคือไม่มีอันตรายมากนักในการซิงโครไนซ์ตัวเองอย่างชัดเจน ตัวอย่างเช่น:
SecureRandom rnd = ...;
byte[] b = new byte[NRANDOM_BYTES];
synchronized (rnd) {
rnd.nextBytes(b);
}