|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.util.Random java.security.SecureRandom
public class SecureRandom
此类提供加密的强随机数生成器 (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 |
构造方法详细信息 |
---|
public SecureRandom()
通过使用此构造方法,调用方可获取一个 SecureRandom 对象,该对象包含的实现来自具有 SecureRandom 实现的最高优先级已安装提供程序。
注意,尚未提供 SecureRandom 的这一实例的种子。对 setSeed
方法的调用将为 SecureRandom 对象提供种子。如果未调用过 setSeed
,则对 nextBytes
方法的初次调用将强制 SecureRandom 对象为其自身提供种子。
提供的这一构造方法是向后兼容的。鼓励调用方使用其中一种替代 getInstance
方法来获得 SecureRandom 对象。
public SecureRandom(byte[] seed)
通过使用此构造方法,调用方可获取一个 SecureRandom 对象,该对象包含的实现来自具有 SecureRandom 实现的最高优先级已安装提供程序。此构造方法使用了一种用户提供的种子,它优先于在空构造方法描述中所提到的自供种子算法。如果调用方对某种物理设备(例如,辐射探测器或噪声二极管)中的高质量随机字节有访问权,则此构造方法可能会优于空构造方法。
提供的这一构造方法是向后兼容的。鼓励调用方使用其中一种替代 getInstance
方法来获得 SecureRandom 对象,然后调用 setSeed
方法为其提供种子。
seed
- 种子。protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
secureRandomSpi
- SecureRandom 实现。provider
- 提供程序。方法详细信息 |
---|
public static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException
注意,尚未提供返回的 SecureRandom 实例的种子。对 setSeed
方法的调用将为 SecureRandom 对象提供种子。如果未调用过 setSeed
,则对 nextBytes
方法的初次调用将强制 SecureRandom 对象为其自身提供种子。
algorithm
- RNG 算法的名称。有关标准 RNG 算法名称的信息,请参阅《Java Cryptography Architecture API Specification & Reference 》中的附录 A。
NoSuchAlgorithmException
- 如果在调用方的环境中未提供 RNG 算法。public static SecureRandom getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
注意,尚未提供返回的 SecureRandom 实例的种子。对 setSeed
方法的调用将为 SecureRandom 对象提供种子。如果未调用过 setSeed
,则对 nextBytes
方法的初次调用将强制 SecureRandom 对象为其自身提供种子。
algorithm
- RNG 算法的名称。有关标准 RNG 算法名称的信息,请参阅《Java Cryptography Architecture API Specification & Reference 》中的附录 A。provider
- 提供程序的名称。
NoSuchAlgorithmException
- 如果提供程序不能提供请求的 RNG 实现。
NoSuchProviderException
- 如果尚未配置提供程序。
IllegalArgumentException
- 如果提供程序的名称为 null 或空。Provider
public static SecureRandom getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
provider
不必被注册。
注意,尚未提供返回的 SecureRandom 实例的种子。对 setSeed
方法的调用将为 SecureRandom 对象提供种子。如果未调用过 setSeed
,则对 nextBytes
方法的初次调用将强制 SecureRandom 对象为其自身提供种子。
algorithm
- RNG 算法的名称。有关标准 RNG 算法名称的信息,请参阅《Java Cryptography Architecture API Specification & Reference 》中的附录 A。provider
- 提供程序。
NoSuchAlgorithmException
- 如果提供程序不能提供请求的 RNG 实现。
IllegalArgumentException
- 如果 provider
为 null。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
兼容。
seed
- 种子。getSeed(int)
public void nextBytes(byte[] bytes)
protected final int next(int numBits)
java.util.Random
方法,并将为继承自类(例如,nextInt
、nextLong
和 nextFloat
)的所有方法提供随机位源。
numBits
- 要生成的伪随机位数,其中 0 <= numBits
<= 32。
int
,包含用户指定的伪随机位数(右对齐,带前导零)。public static byte[] getSeed(int numBytes)
包含此方法仅是为了向后兼容。鼓励调用方使用其中一种替代 getInstance
方法来获得 SecureRandom 对象,然后调用 generateSeed
方法来获取该对象中的种子字节。
numBytes
- 将生成的种子字节的数量。
setSeed(byte[])
public byte[] generateSeed(int numBytes)
numBytes
- 将生成的种子字节的数量。
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。