Most visited

Recently visited

Added in API level 1

SecureRandom

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.

也可以看看:

Summary

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)

使用给定的 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

Public constructors

SecureRandom

Added in API level 1
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

Added in API level 1
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.

Protected constructors

SecureRandom

Added in API level 1
SecureRandom (SecureRandomSpi secureRandomSpi, 
                Provider provider)

创建一个SecureRandom对象。

Parameters
secureRandomSpi SecureRandomSpi: the SecureRandom implementation.
provider Provider: the provider.

Public methods

generateSeed

Added in API level 1
byte[] generateSeed (int numBytes)

返回给定的种子字节数,使用此类用来种子自身的种子生成算法计算。 这个调用可以用来为其他随机数发生器播种。

Parameters
numBytes int: the number of seed bytes to generate.
Returns
byte[] the seed bytes.

getAlgorithm

Added in API level 1
String getAlgorithm ()

返回此SecureRandom对象实现的算法的名称。

Returns
String the name of the algorithm or unknown if the algorithm name cannot be determined.

getInstance

Added in API level 1
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.

也可以看看:

getInstance

Added in API level 1
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.

也可以看看:

getInstance

Added in API level 1
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.

也可以看看:

getProvider

Added in API level 1
Provider getProvider ()

返回此SecureRandom对象的提供者。

Returns
Provider the provider of this SecureRandom object.

getSeed

Added in API level 1
byte[] getSeed (int numBytes)

返回给定的种子字节数,使用此类用来种子自身的种子生成算法计算。 这个调用可以用来为其他随机数发生器播种。

此方法仅用于向后兼容。 鼓励调用者使用其中一种替代getInstance方法获得SecureRandom对象,然后调用generateSeed方法从该对象获取种子字节。

Parameters
numBytes int: the number of seed bytes to generate.
Returns
byte[] the seed bytes.

也可以看看:

nextBytes

Added in API level 1
void nextBytes (byte[] bytes)

生成用户指定数量的随机字节。

如果以前没有发生过对setSeed的调用,则对此方法的第一次调用将强制此SecureRandom对象自行播种。 如果先前调用了setSeed则不会发生自我播种。

Parameters
bytes byte: the array to be filled in with random bytes.

setSeed

Added in API level 1
void setSeed (long seed)

使用给定的long seed包含的八个字节重新调整此随机对象。 给定的种子补充而不是替代现有的种子。 因此,保证重复呼叫绝不会降低随机性。

该方法的定义与 java.util.Random兼容。

Parameters
seed long: the seed.

也可以看看:

setSeed

Added in API level 1
void setSeed (byte[] seed)

重新调整这个随机对象。 给定的种子补充而不是替代现有的种子。 因此,保证重复呼叫绝不会降低随机性。

Parameters
seed byte: the seed.

也可以看看:

Protected methods

next

Added in API level 1
int next (int numBits)

生成一个包含用户指定数量的伪随机比特的整数(右对齐,前导零)。 此方法重写一个java.util.Random方法,以及用于提供随机比特的源到所有的从类继承的方法(例如, nextIntnextLong ,和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).

Hooray!