Java'da 20 rastgele baytlık bir diziyi nasıl oluşturabilirim?
Java'da 20 rastgele baytlık bir diziyi nasıl oluşturabilirim?
Yanıtlar:
Random.nextBytes
Yöntemi deneyin :
byte[] b = new byte[20];
new Random().nextBytes(b);
Üçüncü taraf API kullanmadan şifreleme açısından güçlü bir rastgele sayı üreteci (ayrıca iş parçacığı güvenli) istiyorsanız, SecureRandom
.
Java 6 ve 7:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Java 8 (daha da güvenli):
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
Zaten Apache Commons Lang kullanıyorsanız RandomUtils
, bunu tek satırlık bir program yapar:
byte[] randomBytes = RandomUtils.nextBytes(20);
Java 7 , mevcut iş parçacığı ile izole edilen ThreadLocalRandom'u tanıttı .
Bu, maerics'in çözümünün başka bir yorumudur .
final byte[] bytes = new byte[20];
ThreadLocalRandom.current().nextBytes(bytes);
ThreadLocalRandom
? Daha iyi:ThreadLocalRandom.current().nextBytes(bytes);
Oluşturmak Çekirdeği olan Random nesnesi ve aşağıdakileri yaparak diziyi rastgele alı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]);
Rastgele bir bayt dizisi oluşturmanın daha güvenli bir yolunu isteyenler için, evet en güvenli yol şudur:
byte[] bytes = new byte[20];
SecureRandom.getInstanceStrong().nextBytes(bytes);
ANCAK, işletim sisteminize bağlı olarak makinede yeterli rastgelelik yoksa iş parçacıklarınız engellenebilir. Aşağıdaki çözüm engellemeyecektir:
SecureRandom random = new SecureRandom();
byte[] bytes = new byte[20];
random.nextBytes(bytes);
Bunun nedeni, ilk örneğin /dev/random
daha fazla rastgelelik (bir fare / klavye ve diğer kaynaklar tarafından oluşturulmuş) kullanması ve beklerken engellemesidir. İkinci örnek /dev/urandom
engellemeyecek olanı kullanır .