Bagaimana saya bisa membuat larik 20 byte acak di Jawa?
Bagaimana saya bisa membuat larik 20 byte acak di Jawa?
Jawaban:
Coba Random.nextBytes
caranya:
byte[] b = new byte[20];
new Random().nextBytes(b);
Jika Anda ingin generator nomor acak yang kuat secara kriptografis (juga aman untuk thread) tanpa menggunakan API pihak ketiga, Anda dapat menggunakannya SecureRandom
.
Java 6 & 7:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Java 8 (bahkan lebih aman):
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
Jika Anda sudah menggunakan Apache Commons Lang, RandomUtils
buat ini menjadi satu-baris:
byte[] randomBytes = RandomUtils.nextBytes(20);
Java 7 memperkenalkan ThreadLocalRandom yang terisolasi ke utas saat ini .
Ini adalah terjemahan lain dari solusi maerics .
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
? Lebih baik:ThreadLocalRandom.current().nextBytes(bytes);
Buat objek acak dengan seed dan dapatkan array acak dengan melakukan:
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]);
Bagi mereka yang menginginkan cara yang lebih aman untuk membuat array byte acak, ya cara yang paling aman adalah:
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
TETAPI utas Anda mungkin memblokir jika tidak ada cukup keacakan pada mesin, tergantung pada OS Anda. Solusi berikut tidak akan memblokir:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Ini karena contoh pertama menggunakan /dev/random
dan akan memblokir sambil menunggu lebih banyak keacakan (dihasilkan oleh mouse / keyboard dan sumber lainnya). Contoh kedua menggunakan /dev/urandom
yang tidak akan diblokir.