JavaTM 2 Platform
Standard Ed. 6

java.security
類別 SecureRandom

java.lang.Object
  繼承者 java.util.Random
      繼承者 java.security.SecureRandom
所有已實作的介面:
Serializable

public class SecureRandom
extends Random

此類別提供強加密隨機數產生器 (RNG)。

強加密隨機數至少要遵從 FIPS 140-2, Security Requirements for Cryptographic Modules 中 4.9.1 部分指定的統計隨機數產生器測試。此外,SecureRandom 還必須產生非確定性輸出。因此,根據 RFC 1750: Randomness Recommendations for Security 中的描述,任何傳遞給 SecureRandom 物件的種子材料必須是不可預知的,所有 SecureRandom 的輸出序列必須是強加密的。

調用者可通過無參數建構子或一個 getInstance 方法獲取 SecureRandom 實例:

      SecureRandom random = new SecureRandom();
 

許多 SecureRandom 實作是偽隨機數(亂數)產生器 (PRNG) 的形式,這意味著它們將使用確定的演算法根據實際隨機種子產生偽隨機(亂數) 序列。 其他實作可以產生實際隨機數,而另一些實作則可能結合使用這兩項技術。

通常,SecureRandom 的調用者調用以下方法獲取隨機位元組:

      SecureRandom random = new SecureRandom();
   byte bytes[] = new byte[20];
      random.nextBytes(bytes);
 

調用者還可以調用 generateSeed 方法產生給定的種子位元組數(例如,為其他隨機數產生器提供種子):

      byte seed[] = random.generateSeed(20);
 

另請參見:
SecureRandomSpi, Random, 序列化表格

建構子摘要
  SecureRandom()
          建構一個實作預設隨機數演算法的安全隨機數產生器 (RNG)。
  SecureRandom(byte[] seed)
          建構一個實作預設隨機數演算法的安全隨機數產生器 (RNG)。
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) 演算法的 SecureRandom 物件。
static SecureRandom getInstance(String algorithm, String provider)
          返回實作指定隨機數產生器 (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
 

建構子詳細資訊

SecureRandom

public SecureRandom()
建構一個實作預設隨機數演算法的安全隨機數產生器 (RNG)。

此建構子從首選 Provider 開始,遍歷已註冊安全提供者列表。返回一個封裝 SecureRandomSpi 實作的新 SecureRandom 物件,該實作取自第一個支持 SecureRandom (RNG) 演算法的 Provider。如果沒有 Provider 支持 RNG 演算法,則返回一個特定於實作的預設物件。

注意,已註冊提供者列表可以通過 Security.getProviders() 方法獲得。

有關標準 RNG 演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 的附錄 A。

尚未設置返回 SecureRandom 物件的種子。要設置返回物件的種子,可以調用 setSeed 方法。 如果沒有調用 setSeed,那麼第一次調用 nextBytes 時將強行將 SecureRandom 物件設置為自身的種子。 如果之前調用了 setSeed,則不會發生該操作。


SecureRandom

public SecureRandom(byte[] seed)
建構一個實作預設隨機數演算法的安全隨機數產生器 (RNG)。SecureRandom 實例使用指定的種子位元組設置種子。

此建構子從首選 Provider 開始,遍歷已註冊安全提供者列表。返回一個封裝 SecureRandomSpi 實作的新 SecureRandom 物件,該實作取自第一個支持 SecureRandom (RNG) 演算法的 Provider。如果沒有 Provider 支持 RNG 演算法,則返回一個特定於實作的預設物件。

注意,已註冊提供者列表可以通過 Security.getProviders() 方法獲得。

有關標準 RNG 演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 的附錄 A。

參數:
seed - 種子。

SecureRandom

protected SecureRandom(SecureRandomSpi secureRandomSpi,
                       Provider provider)
創建 SecureRandom 物件。

參數:
secureRandomSpi - SecureRandom 實作。
provider - 提供者。
方法詳細資訊

getInstance

public static SecureRandom getInstance(String algorithm)
                                throws NoSuchAlgorithmException
返回實作指定隨機數產生器 (RNG) 演算法的 SecureRandom 物件。

此方法從首選 Provider 開始,遍歷已註冊安全提供者列表。返回一個封裝 SecureRandomSpi 實作的新 SecureRandom 物件,該實作取自第一個支持指定演算法的 Provider。

注意,已註冊提供者列表可以通過 Security.getProviders() 方法獲得。

尚未設置返回 SecureRandom 物件的種子。要設置返回物件的種子,可以調用 setSeed 方法。 如果沒有調用 setSeed,那麼第一次調用 nextBytes 時將強行將 SecureRandom 物件設置為自身的種子。 如果之前調用了 setSeed,則不會發生該操作。

參數:
algorithm - RNG 演算法的名稱。有關標準 RNG 演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
返回:
新的 SecureRandom 物件。
拋出:
NoSuchAlgorithmException - 如果沒有任何 Provider 支持指定演算法的 SecureRandomSpi 實作。
從以下版本開始:
1.2
另請參見:
Provider

getInstance

public static SecureRandom getInstance(String algorithm,
                                       String provider)
                                throws NoSuchAlgorithmException,
                                       NoSuchProviderException
返回實作指定隨機數產生器 (RNG) 演算法的 SecureRandom 物件。

返回一個封裝 SecureRandomSpi 實作的新 SecureRandom 物件,該實作取自指定提供者。指定的提供者必須已在安全提供者列表中註冊。

注意,已註冊提供者列表可以通過 Security.getProviders() 方法獲得。

尚未設置返回 SecureRandom 物件的種子。要設置返回物件的種子,可以調用 setSeed 方法。 如果沒有調用 setSeed,那麼第一次調用 nextBytes 時將強行將 SecureRandom 物件設置為自身的種子。 如果之前調用了 setSeed,則不會發生該操作。

參數:
algorithm - RNG 演算法的名稱。有關標準 RNG 演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
provider - 提供者的名稱。
返回:
新的 SecureRandom 物件。
拋出:
NoSuchAlgorithmException - 如果不能從指定提供者獲得指定演算法的 SecureRandomSpi 實作。
NoSuchProviderException - 如果指定提供者沒有在安全提供者列表中註冊。
IllegalArgumentException - 如果提供者的名稱為 null 或空。
從以下版本開始:
1.2
另請參見:
Provider

getInstance

public static SecureRandom getInstance(String algorithm,
                                       Provider provider)
                                throws NoSuchAlgorithmException
返回實作指定隨機數產生器 (RNG) 演算法的 SecureRandom 物件。

返回一個封裝 SecureRandomSpi 實作的新 SecureRandom 物件,該實作取自指定 Provider 物件。注意,指定的 Provider 物件無需在安全提供者列表中註冊。

尚未設置返回 SecureRandom 物件的種子。要設置返回物件的種子,可以調用 setSeed 方法。 如果沒有調用 setSeed,那麼第一次調用 nextBytes 時將強行將 SecureRandom 物件設置為自身的種子。 如果之前調用了 setSeed,則不會發生該操作。

參數:
algorithm - RNG 演算法的名稱。有關標準 RNG 演算法名稱的資訊,請參閱 Java Cryptography Architecture API Specification & Reference 中的附錄 A。
provider - 提供者。
返回:
新的 SecureRandom 物件。
拋出:
NoSuchAlgorithmException - 如果不能從指定的 Provider 物件獲得指定演算法的 SecureRandomSpi 實作。
IllegalArgumentException - 如果指定提供者為 null。
從以下版本開始:
1.4
另請參見:
Provider

getProvider

public final Provider getProvider()
返回此 SecureRandom 物件的提供者。

返回:
此 SecureRandom 物件的提供者。

getAlgorithm

public String getAlgorithm()
返回此 SecureRandom 物件實作的演算法的名稱。

返回:
演算法的名稱;如果無法確定演算法名稱,則返回 unknown
從以下版本開始:
1.5

setSeed

public void setSeed(byte[] seed)
重新設置此隨機物件的種子。給定種子補充而不是取代現有的種子。因此,保證重複調用不會降低隨機性。

參數:
seed - 種子。
另請參見:
getSeed(int)

setSeed

public void setSeed(long seed)
使用給定 long seed 中包含的八個位元組,重新設置此隨機物件的種子。給定種子補充而不是取代現有的種子。因此,保證重複調用不會降低隨機性。

定義此方法是為了與 java.util.Random 相容。

覆寫:
類別 Random 中的 setSeed
參數:
seed - 種子。
另請參見:
getSeed(int)

nextBytes

public void nextBytes(byte[] bytes)
產生使用者指定的隨機位元組數。

如果之前沒有調用過 setSeed,那麼第一次調用此方法時將強行將此 SecureRandom 物件設置為自身的種子。 如果之前調用了 setSeed,則不會發生該操作。

覆寫:
類別 Random 中的 nextBytes
參數:
bytes - 用隨機位元組填充的陣列。

next

protected final int next(int numBits)
產生一個套件含使用者指定偽隨機(亂數) 位數的整數(右對齊,帶前導零)。此方法將覆寫 java.util.Random 方法,並將為繼承自類別的所有方法(例如,nextIntnextLongnextFloat)提供隨機位源。

覆寫:
類別 Random 中的 next
參數:
numBits - 要產生的偽隨機(亂數) 位數,其中 0 <= numBits <= 32。
返回:
一個 int,包含使用者指定的偽隨機(亂數) 位數(右對齊,帶前導零)。

getSeed

public static byte[] getSeed(int numBytes)
返回給定的種子位元組數量,該數量可使用此類別用來將自身設置為種子的種子產生演算法來計算。此調用可用於設置其他隨機數產生器的種子。

包含此方法只是為了向後相容。建議調用者使用一個替代 getInstance 方法來獲取 SecureRandom 物件,然後調用 generateSeed 方法獲取該物件中的種子位元組。

參數:
numBytes - 將產生的種子位元組數量。
返回:
種子位元組。
另請參見:
setSeed(byte[])

generateSeed

public byte[] generateSeed(int numBytes)
返回給定的種子位元組數量,該數量可使用此類別用來將自身設置為種子的種子產生演算法來計算。此調用可用於設置其他隨機數產生器的種子。

參數:
numBytes - 將產生的種子位元組數量。
返回:
種子位元組。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only