java加密的强随机数生成器

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

你可能感兴趣的:(java)