Làm cách nào tôi có thể tạo một mảng gồm 20 byte ngẫu nhiên trong Java?
Làm cách nào tôi có thể tạo một mảng gồm 20 byte ngẫu nhiên trong Java?
Câu trả lời:
Hãy thử Random.nextBytes
phương pháp:
byte[] b = new byte[20];
new Random().nextBytes(b);
Nếu bạn muốn một trình tạo số ngẫu nhiên mạnh về mật mã (cũng an toàn cho chuỗi) mà không cần sử dụng API của bên thứ ba, bạn có thể sử dụng SecureRandom
.
Java 6 & 7:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Java 8 (thậm chí an toàn hơn):
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
Nếu bạn đã sử dụng Apache Commons Lang, thì RandomUtils
đây là một lớp lót:
byte[] randomBytes = RandomUtils.nextBytes(20);
Java 7 đã giới thiệu ThreadLocalRandom được phân lập cho luồng hiện tại .
Đây là một biểu hiện khác của giải pháp maerics .
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
? Tốt hơn:ThreadLocalRandom.current().nextBytes(bytes);
Tạo một đối tượng Ngẫu nhiên với một hạt giống và lấy mảng ngẫu nhiên bằng cách thực hiện:
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]);
Đối với những người muốn một cách an toàn hơn để tạo một mảng byte ngẫu nhiên, có, cách an toàn nhất là:
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
NHƯNG chủ đề của bạn có thể chặn nếu không có đủ ngẫu nhiên có sẵn trên máy, tùy thuộc vào hệ điều hành của bạn. Các giải pháp sau đây sẽ không chặn:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Điều này là do ví dụ đầu tiên sử dụng /dev/random
và sẽ chặn trong khi chờ thêm tính ngẫu nhiên (được tạo bởi chuột / bàn phím và các nguồn khác). Ví dụ thứ hai sử dụng /dev/urandom
sẽ không chặn.