SecureRandom
java.security
類 SecureRandom
java.lang.Object java.util.Random java.security.SecureRandom
所有已實現的介面: Serializable
public class SecureRandom
extends Random
此類提供加密的強隨機數產生器 (RNG)。許多實現都是偽隨機數產生器 (PRNG) 形式,這意味著它們將使用確定的演算法根據實際的隨機種子產生偽隨機序列。其他實現可以產生實際的隨機數,而另一些實現則可能結合使用這兩項技術。
加密的強隨機數至少要遵從《FIPS 140-2, Security Requirements for Cryptographic Modules 》中 4.9.1 部分指定的統計隨機數產生器測試。另外,SecureRandom 還必須產生非確定性輸出,因此,正如以下文章中所描述的那樣,要求種子材料必須是不可預知的,SecureRandom 的輸出必須是加密的強序列:《RFC 1750:Randomness Recommendations for Security 》。
與 Java Security 中其他基於演算法的類一樣,SecureRandom 也提供了與實現無關的演算法,因此,調用方(應用程式代碼)會請求特定的 RNG 演算法並將它傳回到該演算法的 SecureRandom 對象中。如果需要,還可以通過特定的提供者請求特定的演算法。請參見 getInstance 方法。
因此,有以下兩種請求 SecureRandom 對象的方法:僅指定演算法名稱,或者既指定演算法名稱又指定包提供者。 如果僅指定演算法名稱,如下所示:
SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); 系統將確定環境中是否有所請求的演算法實現,是否有多個,是否有首選實現。
如果既指定了演算法名稱又指定了包提供者,如下所示:
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); 系統將確定在所請求的包中是否有演算法實現;如果沒有,則拋出異常。
SecureRandom 實現嘗試完全隨機化產生器本身的內部狀態,除非調用方在調用 getInstance 方法之後又調用了 setSeed 方法:
SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(seed);
在調用方從 getInstance 調用中獲得 SecureRandom 對象之後,它可以調用 nextBytes 來產生隨機位元組:
byte bytes[] = new byte[20]; random.nextBytes(bytes);
調用方還可以調用 generateSeed 方法來產生給定的種子位元組數(例如,為其他隨機數量產生器提供種子):
byte seed[] = random.generateSeed(20);
另請參見: SecureRandomSpi , Random , 序列化表格
<!----> <!----> 構造方法摘要
| |
SecureRandom() 通過使用此構造方法,調用方可擷取一個 SecureRandom 對象,該對象包含的實現來自具有 SecureRandom 實現的最高優先順序已安裝提供者。 |
| |
SecureRandom(byte[] seed) 通過使用此構造方法,調用方可擷取一個 SecureRandom 對象,該對象包含的實現來自具有 SecureRandom 實現的最高優先順序已安裝提供者。 |
| protected |
SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider) 建立 SecureRandom 對象。 |
<!---->
<!----> 方法摘要
| byte[] |
generateSeed(int numBytes) 返回給定的種子位元組數量,該數量可使用此類用來為其自身提供種子的種子產生演算法來計算。 |
| String |
getAlgorithm() 返回此 SecureRandom 對象實現的演算法的名稱。 |
| static SecureRandom |
getInstance(String algorithm) 產生實現指定隨機數產生器 (RNG) 演算法的 SecureRandom 對象。 |
| static SecureRandom |
getInstance(String algorithm, Provider provider) 如果提供者能夠提供此種 RNG 實現,則為指定的 RNG 演算法(由指定的提供者提供)產生 SecureRandom 對象。 |
| static SecureRandom |
getInstance(String algorithm, String provider) 如果提供者能夠提供此種 RNG 實現,則為指定的 RNG 演算法(由指定的提供者提供)產生 SecureRandom 對象。 |
| Provider |
getProvider() 返回此 SecureRandom 對象的提供者。 |
| static byte[] |
getSeed(int numBytes) 返回給定的種子位元組數量,該數量可使用此類用來為其自身提供種子的種子產生演算法來計算。 |
| protected int |
next(int numBits) 產生一個包含使用者指定偽隨機位元的整數(靠右對齊,帶前置字元為零)。 |
| void |
nextBytes(byte[] bytes) 產生使用者指定的隨機位元組數。 |
| void |
setSeed(byte[] seed) 重新提供此隨機對象的種子。 |
| void |
setSeed(long seed) 使用給定 long seed 中包含的八個位元組,重新提供此隨機對象的種子。 |
<!----> 從類 java.util.Random 繼承的方法
| nextBoolean, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong |
<!----> 從類 java.lang.Object 繼承的方法
| clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |