java.security

接口
异常
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 - 将生成的种子字节数量。
返回:
种子字节。