Java 21的Pseudorandom的筆記
Linux系統下,常見的隨機數生成設備:
-
/dev/random
隨機性比較好,依賴內核的中斷,當中斷數量不足,獲取隨機數的操作會被阻塞。通過安裝haveged,可以提升熵值。
JDK的默認選項。 -
/dev/urandom
通過熵池來產生隨機數,犧牲一定的隨機性,解決性能問題。
啟動Java應用時,增加如下選項,指定使用/dev/urandom作為隨機數生成器。-Djava.security.egd=file:/dev/./urandom
文檔
-
Pseudorandom Number Generators
PRNGs即Pseudorandom Number Generators。 -
Generating Pseudorandom Numbers with RandomGenerator Interface
使用RandomGenerator來獲取隨機數,樣例代碼,如下:RandomGenerator random1 = RandomGenerator.of("Random"); long value1 = random1.nextLong(); System.out.println(value1);使用RandomGeneratorFactory來創建隨機數生成器,并獲取隨機數,樣例代碼,如下:
RandomGeneratorFactory<RandomGenerator> factory2 = RandomGeneratorFactory.of("SecureRandom"); RandomGenerator random2 = factory2.create(); long value2 = random2.nextLong(); System.out.println(value2);使用Random來獲取隨機數,樣例代碼,如下:
Random random = new Random(); int randomNumber = random.nextInt(); System.out.println(randomNumber);使用SecureRandom來獲取隨機數,樣例代碼,如下:
SecureRandom r1 = new SecureRandom(); SecureRandom r2 = SecureRandom.getInstance("NativePRNG"); SecureRandom r3 = SecureRandom.getInstance("DRBG", DrbgParameters.instantiation(128, RESEED_ONLY, null));RandomGenerator的幾個子類,如下: -
Generating Pseudorandom Numbers in Multithreaded Applications
-
Choosing a PRNG Algorithm
通過使用RandomGenerator.isDeprecated()或者RandomGeneratorFactory.isDeprecated(),可以檢查隨機數生成算法是否被Java官方推薦使用。
當前可用的隨機數生成算法:L64X128MixRandomXoroshiro128PlusPlusL32X64StarStarRandomL32X64MixRandomXoshiro256PlusPlusL64X256MixRandomMRG32k3aL128X128MixRandomL128X256MixRandomL64X1024MixRandomL128X1024MixRandom
選擇隨機數生成器時,平衡如下因素:
- speed,生成隨機數的速度
- space,算法運行時占用的空間
- period,隨機數的生成周期
參考資料
- Java獲取
/dev/urandom的隨機數 - java dev urandom_/dev/random和/dev/urandom的一點備忘
- /dev/urandom和/dev/random的區別
- linux 手動安裝移植 haveged,解決隨機數初始化慢的問題
- 熵值低于1000,需要啟動haveged
- haveged的代碼倉庫
Additionally, since v5.6, as soon as the CRNG (the Linux cryptographic-strength random number generator) gets ready, /dev/random does not block on reads anymore.
- haveged的官方主頁
- 在Java中,可以使用
java.util.Random類來生成隨機數,使用Java生成隨機數的示例代碼 - 【Java代碼審計】失效認證及不安全隨機數篇
- Procedual Generation in Minecraft - Structure Generation
本文來自博客園,作者:jackieathome,轉載請注明原文鏈接:http://www.rzrgm.cn/jackieathome/p/18405643

浙公網安備 33010602011771號