public class SecureRandom
extends Random
java.lang.Object | ||
↳ | java.util.Random | |
↳ | java.security.SecureRandom |
这个类提供了一个密码强的随机数生成器(RNG)。
密码强度很强的随机数最低限度地符合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);Note: Depending on the implementation, the
generateSeed
and
nextBytes
methods may block as entropy is being gathered, for example, if they need to read from /dev/random on various unix-like operating systems. The SHA1PRNG algorithm from the Crypto provider has been deprecated as it was insecure, and also incorrectly used by some apps as a key derivation function. See
Security "Crypto" provider deprecated in Android N for details.
也可以看看:
Public constructors |
|
---|---|
SecureRandom() 构造一个实现默认随机数算法的安全随机数生成器(RNG)。 |
|
SecureRandom(byte[] seed) 构造一个实现默认随机数算法的安全随机数生成器(RNG)。 |
Protected constructors |
|
---|---|
SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider) 创建一个SecureRandom对象。 |
Public methods |
|
---|---|
byte[] |
generateSeed(int numBytes) 返回给定的种子字节数,使用此类用来种子自身的种子生成算法计算。 |
String |
getAlgorithm() 返回此SecureRandom对象实现的算法的名称。 |
static SecureRandom |
getInstance(String algorithm) 返回实现指定的随机数生成器(RNG)算法的SecureRandom对象。 |
static SecureRandom |
getInstance(String algorithm, String provider) 返回实现指定的随机数生成器(RNG)算法的SecureRandom对象。 |
static SecureRandom |
getInstance(String algorithm, Provider provider) 返回实现指定的随机数生成器(RNG)算法的SecureRandom对象。 |
final Provider |
getProvider() 返回此SecureRandom对象的提供者。 |
static byte[] |
getSeed(int numBytes) 返回给定的种子字节数,使用此类用来种子自身的种子生成算法计算。 |
void |
nextBytes(byte[] bytes) 生成用户指定数量的随机字节。 |
void |
setSeed(long seed) 使用给定的 |
void |
setSeed(byte[] seed) 重新调整这个随机对象。 |
Protected methods |
|
---|---|
final int |
next(int numBits) 生成一个包含用户指定数量的伪随机比特的整数(右对齐,前导零)。 |
Inherited methods |
|
---|---|
From class java.util.Random
|
|
From class java.lang.Object
|
SecureRandom ()
构造一个实现默认随机数算法的安全随机数生成器(RNG)。
此构造函数遍历注册安全提供程序的列表,从最优先的提供程序开始。 返回一个新的SecureRandom对象,该对象封装来自支持SecureRandom(RNG)算法的第一个Provider的SecureRandomSpi实现。 如果提供者都不支持RNG算法,则返回实现特定的默认值。
请注意,注册供应商列表可能通过 Security.getProviders()
方法检索。
有关标准RNG算法名称的信息,请参阅 Java Cryptography Architecture Standard Algorithm Name Documentation中的SecureRandom部分。
返回的SecureRandom对象尚未播种。 要为返回的对象播种,请调用setSeed
方法。 如果未调用setSeed
,则第一次调用nextBytes
将强制SecureRandom对象自行播种。 如果先前调用了setSeed
则不会发生自我播种。
SecureRandom (byte[] seed)
构造一个实现默认随机数算法的安全随机数生成器(RNG)。 SecureRandom实例使用指定的种子字节进行播种。
此构造函数遍历注册安全提供程序的列表,从最优先的提供程序开始。 返回一个新的SecureRandom对象,该对象封装来自支持SecureRandom(RNG)算法的第一个Provider的SecureRandomSpi实现。 如果提供者都不支持RNG算法,则返回实现特定的默认值。
请注意,注册供应商列表可以通过 Security.getProviders()
方法检索。
有关标准RNG算法名称的信息,请参阅 Java Cryptography Architecture Standard Algorithm Name Documentation中的SecureRandom部分。
Parameters | |
---|---|
seed |
byte : the seed. |
SecureRandom (SecureRandomSpi secureRandomSpi, Provider provider)
创建一个SecureRandom对象。
Parameters | |
---|---|
secureRandomSpi |
SecureRandomSpi : the SecureRandom implementation. |
provider |
Provider : the provider. |
byte[] generateSeed (int numBytes)
返回给定的种子字节数,使用此类用来种子自身的种子生成算法计算。 这个调用可以用来为其他随机数发生器播种。
Parameters | |
---|---|
numBytes |
int : the number of seed bytes to generate. |
Returns | |
---|---|
byte[] |
the seed bytes. |
String getAlgorithm ()
返回此SecureRandom对象实现的算法的名称。
Returns | |
---|---|
String |
the name of the algorithm or unknown if the algorithm name cannot be determined. |
SecureRandom getInstance (String algorithm)
返回实现指定的随机数生成器(RNG)算法的SecureRandom对象。
该方法遍历注册安全提供程序的列表,从最优先的提供程序开始。 将返回一个新的SecureRandom对象,该对象将封装来自支持指定算法的第一个Provider的SecureRandomSpi实现。
请注意,注册供应商列表可以通过 Security.getProviders()
方法检索。
返回的SecureRandom对象尚未播种。 要为返回的对象播种,请调用setSeed
方法。 如果未调用setSeed
,则首次调用nextBytes
将强制SecureRandom对象自行播种。 如果先前调用了setSeed
则不会发生自我播种。
Parameters | |
---|---|
algorithm |
String : the name of the RNG algorithm. See the SecureRandom section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard RNG algorithm names. |
Returns | |
---|---|
SecureRandom |
the new SecureRandom object. |
Throws | |
---|---|
NoSuchAlgorithmException |
if no Provider supports a SecureRandomSpi implementation for the specified algorithm. |
也可以看看:
SecureRandom getInstance (String algorithm, String provider)
返回实现指定的随机数生成器(RNG)算法的SecureRandom对象。
返回封装指定提供程序的SecureRandomSpi实现的新SecureRandom对象。 指定的提供者必须在安全提供者列表中注册。
请注意,可以通过 Security.getProviders()
方法检索已注册供应商的列表。
返回的SecureRandom对象尚未播种。 要为返回的对象播种,请调用setSeed
方法。 如果未调用setSeed
,则第一次调用nextBytes
将强制SecureRandom对象自行播种。 如果先前调用了setSeed
则不会发生自我播种。
Parameters | |
---|---|
algorithm |
String : the name of the RNG algorithm. See the SecureRandom section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard RNG algorithm names. |
provider |
String : the name of the provider. |
Returns | |
---|---|
SecureRandom |
the new SecureRandom object. |
Throws | |
---|---|
NoSuchAlgorithmException |
if a SecureRandomSpi implementation for the specified algorithm is not available from the specified provider. |
NoSuchProviderException |
if the specified provider is not registered in the security provider list. |
IllegalArgumentException |
if the provider name is null or empty. |
也可以看看:
SecureRandom getInstance (String algorithm, Provider provider)
返回实现指定的随机数生成器(RNG)算法的SecureRandom对象。
返回一个新的SecureRandom对象,封装来自指定Provider对象的SecureRandomSpi实现。 请注意,指定的Provider对象不必在提供程序列表中注册。
返回的SecureRandom对象尚未播种。 要为返回的对象播种,请调用setSeed
方法。 如果未调用setSeed
,则首次调用nextBytes
将强制SecureRandom对象自行播种。 如果先前调用了setSeed
则不会发生自我播种。
Parameters | |
---|---|
algorithm |
String : the name of the RNG algorithm. See the SecureRandom section in the Java Cryptography Architecture Standard Algorithm Name Documentation for information about standard RNG algorithm names. |
provider |
Provider : the provider. |
Returns | |
---|---|
SecureRandom |
the new SecureRandom object. |
Throws | |
---|---|
NoSuchAlgorithmException |
if a SecureRandomSpi implementation for the specified algorithm is not available from the specified Provider object. |
IllegalArgumentException |
if the specified provider is null. |
也可以看看:
Provider getProvider ()
返回此SecureRandom对象的提供者。
Returns | |
---|---|
Provider |
the provider of this SecureRandom object. |
byte[] getSeed (int numBytes)
返回给定的种子字节数,使用此类用来种子自身的种子生成算法计算。 这个调用可以用来为其他随机数发生器播种。
此方法仅用于向后兼容。 鼓励调用者使用其中一种替代getInstance
方法获得SecureRandom对象,然后调用generateSeed
方法从该对象获取种子字节。
Parameters | |
---|---|
numBytes |
int : the number of seed bytes to generate. |
Returns | |
---|---|
byte[] |
the seed bytes. |
也可以看看:
void nextBytes (byte[] bytes)
生成用户指定数量的随机字节。
如果以前没有发生过对setSeed
的调用,则对此方法的第一次调用将强制此SecureRandom对象自行播种。 如果先前调用了setSeed
则不会发生自我播种。
Parameters | |
---|---|
bytes |
byte : the array to be filled in with random bytes. |
void setSeed (long seed)
使用给定的long seed
包含的八个字节重新调整此随机对象。 给定的种子补充而不是替代现有的种子。 因此,保证重复呼叫绝不会降低随机性。
该方法的定义与 java.util.Random
兼容。
Parameters | |
---|---|
seed |
long : the seed. |
也可以看看:
void setSeed (byte[] seed)
重新调整这个随机对象。 给定的种子补充而不是替代现有的种子。 因此,保证重复呼叫绝不会降低随机性。
Parameters | |
---|---|
seed |
byte : the seed. |
也可以看看:
int next (int numBits)
生成一个包含用户指定数量的伪随机比特的整数(右对齐,前导零)。 此方法重写一个java.util.Random
方法,以及用于提供随机比特的源到所有的从类继承的方法(例如, nextInt
, nextLong
,和nextFloat
)。
Parameters | |
---|---|
numBits |
int : number of pseudo-random bits to be generated, where 0 <= numBits <= 32. |
Returns | |
---|---|
int |
an int containing the user-specified number of pseudo-random bits (right justified, with leading zeros). |