1. 程式人生 > >java加密的強隨機數生成器

java加密的強隨機數生成器

java.security 
類 SecureRandom

所有已實現的介面:Serializable
public class SecureRandom
extends Random

此類提供加密的強隨機數生成器 (RNG)。許多實現都是偽隨機數生成器 (PRNG) 形式,這意味著它們將使用確定的演算法根據實際的隨機種子生成偽隨機序列。其他實現可以生成實際的隨機數,而另一些實現則可能結合使用這兩項技術。

與 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[]  
          返回給定的種子位元組數量,該數量可使用此類用來為其自身提供種子的種子生成演算法來計算。
 
          返回此 SecureRandom 物件實現的演算法的名稱。
 
          生成實現指定隨機數生成器 (RNG) 演算法的 SecureRandom 物件。
 
          如果提供程式能夠提供此種 RNG 實現,則為指定的 RNG 演算法(由指定的提供程式提供)生成 SecureRandom 物件。
 
          如果提供程式能夠提供此種 RNG 實現,則為指定的 RNG 演算法(由指定的提供程式提供)生成 SecureRandom 物件。
static byte[] (int numBytes) 
          返回給定的種子位元組數量,該數量可使用此類用來為其自身提供種子的種子生成演算法來計算。
protected  int next(int numBits) 
          生成一個包含使用者指定偽隨機位數的整數(右對齊,帶前導零)。
 void  
          生成使用者指定的隨機位元組數。
 void (byte[] seed) 
          重新提供此隨機物件的種子。
 void  
          使用給定 long seed 中包含的八個位元組,重新提供此隨機物件的種子。
從類 java.util.Random 繼承的方法 從類 java.lang.Object 繼承的方法