public class SecureRandom extends Random
密码强的随机数最低限度符合FIPS 140-2, Security Requirements for Cryptographic Modules第4.9.1节中规定的统计随机数发生器测试。 另外,SecureRandom必须产生非确定性输出。 因此,传递给SecureRandom对象的任何种子材料必须是不可预测的,并且所有SecureRandom输出序列必须加密强,如RFC 1750: Randomness Recommendations for Security 所述 。
调用者通过无参数构造函数或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);
注意:根据实现情况,当收集熵时, generateSeed
和nextBytes
方法可能会阻塞,例如,如果需要在各种类Unix操作系统上从/ dev / random读取。
SecureRandomSpi
, Random
, Serialized Form
Modifier | Constructor and Description |
---|---|
|
SecureRandom()
构造一个实现默认随机数算法的安全随机数生成器(RNG)。
|
|
SecureRandom(byte[] seed)
构造一个实现默认随机数算法的安全随机数生成器(RNG)。
|
protected |
SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
创建一个SecureRandom对象。
|
Modifier and Type | Method and Description |
---|---|
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对象。
|
static SecureRandom |
getInstanceStrong()
返回通过使用 securerandom.strongAlgorithms Security 属性中指定的算法/提供程序选择的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 中包含的八个字节来重新设置这个随机对象。
|
public SecureRandom()
此构造函数遍历注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持SecureRandom(RNG)算法的第一个Provider中封装SecureRandomSpi实现的新SecureRandom对象。 如果没有提供者支持RNG算法,则返回实现特定的默认值。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
看到SecureRandom的部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准RNG算法名称的信息。
返回的SecureRandom对象尚未播种。 要种子返回的对象,请调用setSeed
方法。 如果未调用setSeed
,则首次调用nextBytes
将强制SecureRandom对象进行种子化。 如果以前调用了setSeed
,则不会发生此种子播放。
public SecureRandom(byte[] seed)
此构造函数遍历注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持SecureRandom(RNG)算法的第一个Provider中封装SecureRandomSpi实现的新SecureRandom对象。 如果没有提供者支持RNG算法,则返回实现特定的默认值。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
看到SecureRandom的部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准RNG算法名称的信息。
seed
- 种子。
protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
secureRandomSpi
- SecureRandom实现。
provider
- 提供商。
public static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException
此方法遍历已注册的安全提供程序列表,从最优选的提供程序开始。 返回从支持指定算法的第一个Provider中封装SecureRandomSpi实现的新SecureRandom对象。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
返回的SecureRandom对象尚未播种。 要种子返回的对象,请调用setSeed
方法。 如果未调用setSeed
,则首次调用nextBytes
将强制SecureRandom对象自身进行种子生成。 如果以前调用了setSeed
,则不会发生此种子播放。
algorithm
- RNG算法的名称。
看到SecureRandom的部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准RNG算法名称的信息。
NoSuchAlgorithmException
- 如果没有提供程序支持指定算法的SecureRandomSpi实现。
Provider
public static SecureRandom getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
返回从指定的提供程序封装SecureRandomSpi实现的新SecureRandom对象。 指定的提供者必须在安全提供程序列表中注册。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
返回的SecureRandom对象尚未播种。 要种子返回的对象,请调用setSeed
方法。 如果未调用setSeed
,则首次调用nextBytes
将强制SecureRandom对象进行种子化。 如果以前调用了setSeed
,则不会发生此种子播放。
algorithm
- RNG算法的名称。
看到SecureRandom的部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准RNG算法名称的信息。
provider
- 提供商的名称。
NoSuchAlgorithmException
- 如果指定算法的SecureRandomSpi实现不能从指定的提供程序获得。
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册。
IllegalArgumentException
- 如果提供者名称为空或为空。
Provider
public static SecureRandom getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
返回从指定的Provider对象封装SecureRandomSpi实现的新SecureRandom对象。 请注意,指定的Provider对象不必在提供者列表中注册。
返回的SecureRandom对象尚未播种。 要种子返回的对象,请调用setSeed
方法。 如果未调用setSeed
,则首次调用nextBytes
将强制SecureRandom对象自身进行种子生成。 如果以前调用了setSeed
,则不会发生此种子播放。
algorithm
- RNG算法的名称。
看到SecureRandom的部分Java Cryptography Architecture Standard Algorithm Name Documentation有关标准RNG算法名称的信息。
provider
- 提供商。
NoSuchAlgorithmException
- 如果指定的算法的SecureRandomSpi实现从指定的Provider对象中不可用。
IllegalArgumentException
- 如果指定的提供程序为空。
Provider
public final Provider getProvider()
public String getAlgorithm()
unknown
如果无法确定算法名称。
public void setSeed(byte[] seed)
seed
- 种子。
getSeed(int)
public void setSeed(long seed)
long seed
中包含的八个字节来重新设置此随机对象。
给定的种子补充,而不是替代现有的种子。
因此,重复的呼叫保证不会减少随机性。
该方法的定义是与java.util.Random
。
setSeed
在
Random
seed
- 种子。
getSeed(int)
public void nextBytes(byte[] bytes)
如果将呼叫setSeed
以前没有发生,给此方法的第一次调用强制此SecureRandom对象自身的种子。 如果以前调用了setSeed
,则不会发生此种子播放。
protected final int next(int numBits)
java.util.Random
方法,以及用于提供随机比特的源到所有的从类继承的方法(例如, nextInt
, nextLong
和nextFloat
)。
public static byte[] getSeed(int numBytes)
此方法仅用于向后兼容。 鼓励呼叫者使用其他getInstance
方法来获取一个SecureRandom对象,然后调用generateSeed
方法从该对象获取种子字节。
numBytes
- 要生成的种子字节数。
setSeed(byte[])
public byte[] generateSeed(int numBytes)
numBytes
- 要生成的种子字节数。
public static SecureRandom getInstanceStrong() throws NoSuchAlgorithmException
securerandom.strongAlgorithms
Security
属性中指定的算法/提供程序选择的SecureRandom
对象。
某些情况需要强大的随机值,例如创建高价值/长寿命秘密(如RSA公钥/私钥)时。 为了帮助指导应用程序选择合适的强大的SecureRandom
实现,Java发行版包括securerandom.strongAlgorithms
Security属性中已知的强大的SecureRandom
实现列表。
Java平台的每个实现都需要至少支持一个强大的SecureRandom
实现。
SecureRandom
执行,如
securerandom.strongAlgorithms
Security
securerandom.strongAlgorithms
NoSuchAlgorithmException
- 如果没有算法可用
Security.getProperty(String)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.