20 rastgele baytlık bir dizi nasıl oluşturulur?


Yanıtlar:



46

Üçü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);

16

Zaten Apache Commons Lang kullanıyorsanız RandomUtils , bunu tek satırlık bir program yapar:

byte[] randomBytes = RandomUtils.nextBytes(20);

8
RandomUtils, biraz araştırma yaptıktan sonra, SecureRandom yerine Math.random () 'u kullanır. Bunu açıklığa kavuşturmak istedim.
Evo510

Bu yöntem artık mevcut değil.
Martijn Hiemstra


@DuncanJones Commons lang 3.7 kullanan Spring boot 2 kullanıyorum ve kaldırıldı. Kaynak kodunu görüntülemek, yorum yapıldığını gösterir. Bu nedenle, bir yükseltme kodunuzu derlenemez hale getirebileceğinden bu koda güvenmem.
Martijn Hiemstra


4

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]);

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/randomdaha fazla rastgelelik (bir fare / klavye ve diğer kaynaklar tarafından oluşturulmuş) kullanması ve beklerken engellemesidir. İkinci örnek /dev/urandomengellemeyecek olanı kullanır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.