Wie kann ich in Java ein Array mit 20 zufälligen Bytes erstellen?
130
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 .
quelle
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:
quelle
Für diejenigen, die einen sichereren Weg zum Erstellen eines zufälligen Byte-Arrays suchen, ist der sicherste Weg:
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:
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.quelle