Wie kann ich in Java ein Array mit 20 zufälligen Bytes erstellen?
Wie kann ich in Java ein Array mit 20 zufälligen Bytes erstellen?
Antworten:
Probieren Sie die Random.nextBytes
Methode aus:
byte[] b = new byte[20];
new Random().nextBytes(b);
Wenn Sie einen kryptografisch starken Zufallszahlengenerator (auch threadsicher) ohne Verwendung einer Drittanbieter-API benötigen, können Sie diesen verwenden SecureRandom
.
Java 6 & 7:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Java 8 (noch sicherer):
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
Wenn Sie bereits Apache Commons Lang verwenden, RandomUtils
ist dies ein Einzeiler:
byte[] randomBytes = RandomUtils.nextBytes(20);
In Java 7 wurde ThreadLocalRandom eingeführt , das vom aktuellen Thread isoliert ist .
Dies ist eine weitere Wiedergabe der Maerics-Lösung .
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
? Besser:ThreadLocalRandom.current().nextBytes(bytes);
Erstellen Sie ein zufälliges Objekt mit einem Startwert und erhalten Sie das Array zufällig, indem Sie Folgendes tun:
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]);
Für diejenigen, die einen sichereren Weg zum Erstellen eines zufälligen Byte-Arrays suchen, ist der sicherste Weg:
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
ABER Ihre Threads blockieren möglicherweise, wenn auf dem Computer je nach Betriebssystem nicht genügend Zufälligkeit verfügbar ist. Die folgende Lösung wird nicht blockiert:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Dies liegt daran, dass das erste Beispiel verwendet /dev/random
und blockiert, während auf mehr Zufälligkeit gewartet wird (generiert durch eine Maus / Tastatur und andere Quellen). Das zweite Beispiel verwendet, /dev/urandom
die nicht blockieren.