java加密的強隨機數產生器__java

來源:互聯網
上載者:User
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.